On Sunday, 14 April 2013 at 15:27:29 UTC, Ali Çehreli wrote:
On 04/13/2013 11:35 PM, qznc wrote:

>> [...]
talking about
>>       [...]
// in D
>> [...]
is similar to
>>       [...]
foo(const int *
>>       [...]
const ref d);
>> [...]
immutable.)
>
> The C variant is an mutable pointer to an immutable int. What
is not to
> know about that?

What foo() does not know is whether the original int is const or not:

    int i = 0;
    foo(&i);

    // Can be mutated by the caller later on
    i = 1;

For that reason, function foo() cannot store the pointer 'c' in confidence that it will not change in the future.

Of course you and the dlang.org link that you have provided indicate that immutable is not the same as const. When you say "You can qualify variables as immutable, which is similiar to C's const and Java's final, but it is transitive", it sounds like the main difference that brings 'immutable' is transitivity but I think the fact that data cannot be mutated is the main difference. That makes it possible for a function to request immutable data, something not possible in C because a const reference parameter is not a requirement but a promise not to mutate.

And of course you never say they are the same; you say "similar". Nothing is wrong with that. :)

Ali

This is excellent information on functional programming with D. I would love to see a lot more information in this area - perhaps a much longer article covering in more detail - and also covering what is missing - e.g. does D have a for comprehension, Option, Either etc

Reply via email to