mutable, const, immutable guidelines

Daniel Davidson nospam at spam.com
Wed Oct 2 06:09:33 PDT 2013


I'm reviewing Ali's insightful presentation from 2013 DConf. I 
wonder has he or anyone else followed up on the concepts or 
formalized some guidelines that could achieve consensus. I 
definitely agree it would be helpful to have a 50 Ways To Improve 
Your D. The first thing I'd like to see is a set of guidelines on 
mutability along the lines he discussed in his talk. But as it 
stands, I don't know if there was any finalization/consensus. For 
instance, from the first two guidelines at the end (after several 
iterative reconstructions of those guidelines):

1. If a variable is never mutated, make it const, not immutable.
2. Make the parameter reference to immutable if that is how you 
will use it anyway. It is fine to ask a favor from the caller.
...

If you follow (1) exclusively, why the need for immutable in the 
language at all?

Maybe it is a philosophical question, but where does immutability 
really come from? Is it an aspect of some piece of data or is it 
a promise that function will not change it? Or is it a 
requirement by a function that data passed not be changed by 
anyone else?

The two keywords cover all in some sense.

I found the end of the video amusing, when one gentleman looking 
at a rather sophisticated "canonical" struct with three overloads 
for 'this(...)' and two overloads for opAssign, asked if all 
those methods were required. I think there was back and forth and 
head-scratching. Another asked if the language designers were 
happy with the resultant complexity. Naturally the answer was yes 
- it is a good mix. If that is the case I wonder if the reason is 
they don't write software in D like Ali was looking to develop. I 
imagine standard library code is much more functional than OO by 
its very nature. My money says you will not find a struct S 
constructed like Ali's in the wild - it is just too much 
boilerplate. But surely they have their own guidelines/approaches.

By posting this I am not looking for a single answer to the 
simple question above as it is just one of many questions in the 
set of "how do you choose among the options in general". If you 
have such guidelines - please post them.

Thanks
Dan



More information about the Digitalmars-d-learn mailing list