Andrei Alexandrescu:

> bool isNull(T)(Optional!T value);
> Am I on the right track? If so, what is the name you'd prefer for this 
> artifact?

It looks good and simple enough. The name may be "Nullable" or "Maybe" or 
something like that. This looks like a good use case of the alias this" feature.

Such Nullable() may contain a static if that avoids the presence of the 
internal boolean field if T is already a pointer or class reference, saving 
memory. And isNull() may work with pointer/class references too in input.

But such Nullable struct has to be designed thinking about the future too: I 
hope in future D2 will have nonull class references (a feature that's probably 
5-10 times more useful than the Nullable wrapper), so you need a "nullable" or 
@nullable keyword or annotation to specify that a class reference can be null. 
In such situation it may be possible for the @nullable annotation to work on 
values too (in this case it wraps them into a Nullable struct). I don't know if 
such double usage of @nullable can lead to problems, I think not.

A possible future compiler optimization for arrays of Nullables is to split it 
into two arrays: an array of just the wrapped type, plus a bitvector to 
represent what items are null. But arrays of nullables probably will not be 
common enough to deserve such optimization...

Bye,
bearophile

Reply via email to