Why immutable ?

Jonathan M Davis jmdavisProg at gmx.com
Sun Dec 12 11:13:15 PST 2010


On Sunday 12 December 2010 08:03:57 Simen kjaeraas wrote:
> Eyyub <eyyub34 at hotmail.fr> wrote:
> > I recently upgraded to the D 2, and i would like understand for which
> > reason they are the immutable keyword !
> 
> immutable means 'this data cannot change'. It is different from const in
> that the latter means 'I cannot change this data (but someone else may
> change it from under my feet)'.
> 
> It is added for simplification of sharing (no locking required), and to
> a certain extent to allow for better optimization and functional
> programming.

You should probably check out this: means that any data reachable this page: 
http://www.digitalmars.com/d/2.0/const3.html

And of course, Andrei's book, The D Programming Language would be a great 
resource, but the primary benefit of immutable releates to threading. const 
doesn't buy you anything with regards to threads. Just because one reference or 
pointer is a reference or pointer to const does not mean that _all_ references 
or pointers to that data point to const. Mutexes and the like can't assume 
_anything_ based on const.

immutable, on the other hand, will _never_ change. You can rely on that. So, if 
you have a reference or pointer to immutable data, you _know_ that it won't 
change. This makes sharing between threads easy without being error-prone. For 
instance, std.concurrency uses immutable objects for message passing between 
threads. That wouldn't work with const, because the original thread might still 
be able to alter the data. Also, immutable data can (at least theoretically) be 
put in read-only memory, which certainly can't be done with const.

So, there are definite gains from immutable. Most deal with threading, but there 
are others. const is still very useful (particularly since it allows you to have 
a function that can take either a mutable or immutable argument) but it plays a 
very different role overall.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list