Persistent list

Joseph Cassman via Digitalmars-d digitalmars-d at puremagic.com
Mon Nov 16 01:04:29 PST 2015


On Monday, 16 November 2015 at 06:24:05 UTC, Jonathan M Davis 
wrote:
[...]
>
> Regardless, I think that it's quite clear that certain idioms 
> simply do not work with physical const, and there's been 
> complaining about that for years. The only real question here 
> is whether those idioms are worth enough to lose out on 
> physical const. The answer up until now has always been no (at 
> least from Walter), but since Andrei is now hitting this 
> himself rather than seeing others complain about it, he clearly 
> views it as a problem in a way that he didn't before, so that 
> may result in him changing Walter's mind.
>
> - Jonathan M Davis

I appreciate this discussion. I feel better that I am not the 
only one having difficulty with the _const_ keyword. Honestly 
about the only time I use _const_ is to tell the D compiler that 
a struct member function does not modify its containing type. 
When I start to use _const_ I quickly get a headache trying to 
figure out how to fix my code when the compiler starts to 
complain about function overloading issues and starts to require 
explicit casts all over the place, _inout_ doesn't work, did I 
use _Unqual_ or maybe I shouldn't, should this be a template, 
etc. I end up with a headache and all I want is the thing to 
compile. I wonder many times why go through the trouble. Why not 
just use a unit test?

After reading through this discussion I wonder if it has been 
considered to keep _immutable_ and _const_ as they are, but add a 
less restrictive do-not-change-me type qualifier to the language? 
A keyword like _readonly_, for example, could represent the idea 
of intransitive const (or perhaps even a different type of 
do-not-change-me-ness). I appreciate the need to be conservative 
in language additions, especially at this point in the life cycle 
of D2. Still, if people want and can show they need a type of 
do-not-change-me type qualifier in addition to _const_ and 
_immutable_ (not overlapping with unique et. al.) why not provide 
it for them?

Just as a side thought, although it is probably a bit of a 
dasoku. But I have always wondered that if the purpose of _const_ 
is to allow some data to be changed by one reference but not 
changed by another, then why is it transitive. Doesn't that 
defeat its purpose? And then doesn't transitive const effectively 
have the same semantics and use-case as _immutable_? I mean, once 
you start to use transitive const in an interface, how are you 
supposed to get the mutable reference that is so promised? 
Perhaps this is the question that is essentially being asked here?

Joseph


More information about the Digitalmars-d mailing list