Head Const

Marc Schütz via Digitalmars-d digitalmars-d at puremagic.com
Wed Feb 17 10:48:53 PST 2016


On Wednesday, 17 February 2016 at 02:20:15 UTC, Dicebot wrote:
> One example of a existing guarantee you won't be able to keep, 
> for example, is that any immutable allocation can be completely 
> put into separate read-only memory.

Yes, and it would be rejected statically (rule 2). I therefor 
don't consider this a problem.

> A very important property for building optimized allocators if 
> you keep in mind sharing goals of immutability.

This is considered too (rule 3). An object can only be immutable 
if all its embedded @mutable members are marked as shared.

>
>> For example, it's always possible to use a global mutable 
>> associative array to store additional data connected with an 
>> immutable or const object (ignoring purity issues for the 
>> moment). That's safe because from the outside, there's no 
>> observable change to the state of the object itself, and the 
>> global AA's type (shared/thread-local) prevents race 
>> conditions.
>
> Yes and this is how I believe it must be done.
>
>> There's no reason why we can't have the same guarantees for 
>> embedded members, without resorting to an external AA. Have a 
>> look at my DIP [1] for lazy initialization of const members, 
>> which I now realize can be adapted to this use case. 
>> Basically, just replace `lazy` by `@mutable`, and most of the 
>> DIP is still valid. I'll try updating it when I find the time.
>> 
>> [1] http://wiki.dlang.org/DIP85
>
> The problem with this DIP is that it speaks about type system 
> semantics and what matters first is memory model (which is 
> currently very under-defined as soon as you step from a "the 
> GC" world).

I'd say most of the memory model issues are the same as those 
with shared, which is just as undefined currently. That leaves 
possible reordering of accesses to immutable data. I don't have a 
complete answer to that at the moment, but most of it is likely 
also covered by the fact that the @mutable members must be shared 
in this case.

>
> Physical immutability is demanding but it also has great value 
> in its simplicity and being hard to fool. Any language change 
> that is going to reject this notion has to be really strongly 
> justified in terms of what is gained and what is lost and not 
> come simply because expressing such semantics is possible.




More information about the Digitalmars-d mailing list