Why do "const inout" and "const inout shared" exist?
Andrei Alexandrescu via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jul 1 16:08:40 PDT 2017
On 07/01/2017 06:12 PM, Timon Gehr wrote:
> On 01.07.2017 23:47, Andrei Alexandrescu wrote:
>> Walter looked at http://erdani.com/conversions.svg and said actually
>> "const inout" and "const inout shared" should not exist as distinct
>> qualifier groups, leading to the simplified qualifier hierarcy in
>> http://erdani.com/conversions-simplified.svg.
>>
>> Are we missing something?
>
> I don't think so.
>
>> Is there a need for combining const and inout?
>> ...
>
> In DMD's implementation, yes. (Combinations of qualifiers are
> represented as integers instead of nested AST nodes.)
>
> const(const(T)) = const(T)
> const(immutable(T)) = immutable(T)
> const(inout(T)) = ?
>
> It used to be the case that const(inout(T)) = const(T), but this is
> wrong, because if we replace 'inout' by 'immutable', the result should
> be immutable(T), not const(T). Hence const(inout(T)) cannot be reduced
> further.
>
> The simplified hierarchy is enough though. The more complex one can be
> derived from it. Since S -> const(S) for all S, it directly follows that
> inout(T) -> const(inout(T)) for all T (we can choose S=inout(T)).
Thanks! Well I do want to have a hierarchy with all possible qualifier
combinations for utmost clarity. Only the combinations listed are valid,
e.g. there's no "immutable inout" or whatever.
Vaguely related question: should "const" convert implicitly to "const
shared"? The intuition is that the latter offers even less guarantees
than the former so it's the more general type. See
http://erdani.com/conversions3.svg.
That would be nice because we have "const shared" as the unique root of
the qualifier hierarchy.
Andrei
More information about the Digitalmars-d
mailing list