Vision for the D language - stabilizing complexity?

deadalnix via Digitalmars-d digitalmars-d at puremagic.com
Fri Jul 15 10:27:04 PDT 2016


On Friday, 15 July 2016 at 14:45:41 UTC, Andrei Alexandrescu 
wrote:
> On 07/14/2016 12:17 PM, Jesse Phillips wrote:
>> On Tuesday, 12 July 2016 at 05:15:09 UTC, Shachar Shemesh 
>> wrote:
>>> C++ fully defines when it is okay to cast away constness, 
>>> gives you
>>> aids so that you know that that's what you are doing, and 
>>> nothing
>>> else, and gives you a method by which you can do it without a 
>>> cast if
>>> the circumstances support it.
>>>
>>> D says any such cast is UB.
>>>
>>> Shachar
>>
>> Yeah C++ defines how you can modify const data after saying 
>> you can
>> never modify data from a const qualified access path. 
>> §7.1.​6.1/3[1]
>>
>> I still haven't found someone who can explain how C++ can 
>> define the
>> behavior of modifying a variable after casting away const. 
>> Sure it says
>> that if the original object was mutable (not stored in ROM) 
>> than you can
>> modify it, but that is true of D as well, but the language 
>> doesn't know
>> the object is not stored in ROM so it can't tell you what it 
>> will do
>> when you try to modify it, only you can.
>>
>> 1. 
>> http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4296.pdf
>
> Getting back to D, a more appropriate definition that gives us 
> enough flexibility to implement allocators etc. has to take 
> time into account. Something like the following:
>
> "During and after mutating a memory location typed as 
> (unqualified) type T, no thread in the program (including the 
> current thread) is allowed to effect a read of the same 
> location typed as shared(T) or immutable(T)."
>
> This allows us to implement portably allocators that mutate 
> formerly immutable data during deallocation.
>
>
> Andrei

Read or write.

For const(T) , same thing, but limited to write.

Everything else is UB, as it is already UB at the hardware level.


More information about the Digitalmars-d mailing list