Extended Type Design.
Andrei Alexandrescu (See Website For Email)
SeeWebsiteForEmail at erdani.org
Fri Mar 16 14:28:13 PDT 2007
Reiner Pope wrote:
> Andrei Alexandrescu (See Website For Email) Wrote:
>
>> Bruno Medeiros wrote:
>>> What is the status of the experimental designs for the "storage classes"
>>> manipulation that Andrei and others where thinking of for D. The last I
>>> heard from it was Andrei's max suggestion from his max design challenge,
>>> however, I think that suggestion may suffer from some problems in
>>> regards to the "maxtype" requirement, plus it is wholly incomplete in
>>> regards to how storage classes interact between each other. Like Andrei
>>> said, what is a "const inout lazy const char[]", if valid at all? Is
>>> there any news here? Is there a working(aka complete) design?
>> We have talked about a design. In short, the intent is to define three
>> flavors of immutability:
>>
>> a) final - a simple storage class controlling the immutability of the
>> bits allocated for the symbol per se;
>>
>> b) const - type qualifier meaning an immutable view of an otherwise
>> modifiable data. const does not control the bits of the object, only the
>> storage addressed indirectly by it (transitively);
>>
>> c) "superconst" - denoted as "const!" or "super const": type qualifier
>> meaning that the data is genuinely unmodifiable.
>>
>> There is talk about deprecating lazy if it's best implemented via other
>> mechanisms. There is also talk about deprecating "inout" in favor of
>> "ref" on grounds that the often-useful "inout const" is likely to become
>> #1 reason for bashing D.
>>
>> To read a declaration like "const inout lazy const char[]", you can
>> first parenthesize it appropriately:
>>
>> const(inout(lazy(const(char[]))))
>>
>> The lazy thing is really a delegate that returns a const char[]. The
>> inout around it passes that delegate by reference, and the const at the
>> top makes the delegate immutable.
>>
>>
>> Andrei
>
> So, would this allow you to express the associative array requirement, that the key must never be changed after it is set?
>
> char[] myKey = "foo";
> myAA[myKey] = "bar";
> myKey = "something else"; // ERROR: this stuffs up the AA
>
> would you write the getter's signature as superconst?
>
> T set(super const K key) {...}
>
> Is super const allowed as a parameter type?
Yes.
Andrei
More information about the Digitalmars-d
mailing list