Persistent list

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Sun Nov 15 07:14:36 PST 2015


On Sunday, 15 November 2015 at 14:54:51 UTC, Andrei Alexandrescu 
wrote:
> On 11/15/2015 09:34 AM, Dicebot wrote:
>> On Sunday, 15 November 2015 at 14:23:05 UTC, Jonathan M Davis 
>> wrote:
>>>> As I mentioned, he's okay with changing the language to make 
>>>> the
>>>> casts well defined. -- Andrei
>>>
>>> Well, that's a big change, since it pretty much means that 
>>> D's const
>>> isn't physical const anymore, and Walter has been _very_ 
>>> insistent
>>> about that in the past - to the point that he's argued that 
>>> C++'s
>>> const is outright useless because it isn't physical const. If 
>>> casting
>>> away const and mutating is well-defined behavior, then we 
>>> basically
>>> have C++'s const except that it's transitive ...
>>
>> Casting away _const_ is already legal if programmer can himself
>> guarantee underlying object has mutable origin (i.e. not 
>> available via
>> immutable reference), by the very definition of const. It is 
>> casting
>> away immutable and mutating that is strictly UB.
>
> Correct. I'm not sure whether that's clarified in the language 
> documentation yet. -- Andrei

Quite the opposite in fact. Walter recently approved an update to 
the spec which clarified that it _is_ undefined behavior to cast 
away const and mutate even if the object being referred to isn't 
immutable underneath the hood:

https://github.com/D-Programming-Language/dlang.org/pull/1047

And from what I've seen, Walter has always been adamant that D's 
const is physical const and that casting away const and mutating 
is undefined behavior, arguing that if it weren't, it would be 
like C++'s const and that C++'s const is pretty much useless, 
because it doesn't provide actual guarantees. So, if he's now 
willing to have casting away const and mutating be well-defined 
behavior, that's a big shift.

- Jonathan M Davis


More information about the Digitalmars-d mailing list