Congratulations to the D Team!

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Wed Jul 11 05:26:22 PDT 2012


On 7/10/12 10:22 PM, Walter Bright wrote:
> On 7/10/2012 6:53 PM, Andrei Alexandrescu wrote:
>> On 7/10/12 9:14 PM, Walter Bright wrote:
>>> Anyhow, the point of @trusted is to notify the maintainer that "here be
>>> dragons".
>>
>> I think that's not representing @trusted quite accurately. There's no
>> dragon
>> there. @trusted means "the code is correct but not mechanically
>> checkable".
>> Casting away const is NOT correct.
>
> You're right in that it would break immutable args passed.
>
> PIMPL is a better option.

I am pretty sure your approach with PIMPL is also undefined, so we may 
as well stop suggesting it as a viable possibility.

Consider:

immutable(T) t1 = create();
int x = t1.x;
const(T) t2 = t2;
t2.method();
assert(x == t1.x); // the compiler should be able to assume this

For the entire immutable thing to work, the compiler must have an 
iron-clad guarantee that transitively-accessed data members in t1 will 
preserve before and after the call to t2.method(). Your proposed cast, 
if ever defined, essentially breaks that guarantee. If that is down, the 
entire notion of immutable breaks down.

Please do not propose pimpl and cast anymore. This is important. Thanks.


Andrei


More information about the Digitalmars-d mailing list