What are (dis)advantages of using pure and immutable by default?
anonymous via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Sep 7 04:49:31 PDT 2015
On Monday 07 September 2015 13:12, Bahman Movaqar wrote:
> I was under the impression that when a variable, that is declared
> as `immutable`, is passed to a function, a copy of the value is
> passed.
>
> However based on "marks" I can imagine that since the data is
> marked as `immutable` only a reference is passed; and the
> compiler guarantees that what is referenced to never changes. Am
> I right?
Generally immutable doesn't affect how things are passed around. An
immutable type is passed the same as a mutable version of it.
Compilers may optimize based on immutability. This may mean that a reference
is passed instead of a copy, or the other way around. I don't know if
compilers do such things currently, or how much potential is in that. Also,
I don't think the language has a stance on that; it's purely an
optimization.
immutable does affect how you can pass things around, though. An example:
----
void f(int a) {}
void g(int* a) {}
void main()
{
int xm;
immutable int xi;
f(xm); /* ok, obviously */
f(xi); /* ok */
int* ym = &xm;
immutable int* yi = ξ
g(ym); /* ok, obviously */
g(yi); /* doesn't compile */
}
----
f(xi) is ok because when passing an int or an immutable(int), it's copied
completely. So the f cannot possibly mutate the original immutable variable
xi.
g(yi) is not ok, because when passing an int* or an immutable(int*), only
the pointer is copied. So g could dereference yi and mutate the referenced
immutable variable xi.
The same applies to other forms of references: classes, ref parameters,
arrays.
More information about the Digitalmars-d-learn
mailing list