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