Is the other-kind-of-null really necessary in Nullable and Variant?

Idan Arye GenericNPC at gmail.com
Sun Apr 28 10:23:17 PDT 2013


On Sunday, 28 April 2013 at 17:02:57 UTC, bearophile wrote:
> Idan Arye:
>
>> When you use `std.typecons.Nullable` with a type that already 
>> accept `null` values, you get two types of nulls - the 
>> `Nullable`'s null state the the regular type's `null`:
>>
>>    Nullable!string a;
>>    writeln(a.isNull()); //prints "true"
>>    a = null;
>>    writeln(a.isNull()); //prints "false"
>
> Originally D dynamic arrays were almost conflated with regular 
> pointers (they were seen as fat pointers). This was recently 
> partially fixed (so assigning a pointer to a dynamic array is 
> now forbidden), but accepting "null" for their empty literal is 
> one left part of that original suboptimal design.
>
> Time ago I have proposed to forbid "null" as literal for an 
> empty dynamic array literal, an empty associative literal, or 
> an empty string, and to accept only []  ""  [:] (D already has 
> the first two literals and the third looks natural).
>
> See also:
> http://d.puremagic.com/issues/show_bug.cgi?id=3889
> http://d.puremagic.com/issues/show_bug.cgi?id=5788
> http://d.puremagic.com/issues/show_bug.cgi?id=7227
>
> Bye,
> bearophile

I used `Nullable!string` for the example, but it could just as 
easily be `Nullable!Object` or `Nullable!(int*)`.


More information about the Digitalmars-d mailing list