Forbid dynamic arrays in boolean evaluation contexts

Vladimir Panteleev vladimir at thecybershadow.net
Tue Mar 26 04:24:56 PDT 2013


On Tuesday, 26 March 2013 at 08:15:05 UTC, Timon Gehr wrote:
> On 03/26/2013 03:21 AM, Vladimir Panteleev wrote:
>> ...
>>
>> I use this feature in the same way that anyone uses a nullable 
>> type.
>> It's the same distinction between a pointer to struct that is 
>> null, or
>> that is pointing to an instance containing the struct's .init. 
>> It's the
>> same distinction between a value type T and the benefits of 
>> Nullable!T.
>> "null" is usually used to indicate the absence of a value, as 
>> opposed to
>> an empty value.
>>
>
> It is not the same distinction. It is not like that for dynamic 
> arrays!
>
> void main(){ assert(null is []); }

[] (the literal) has .ptr as null. That may or may not be a bug. 
To create a non-null empty array, you have to use something like 
(new uint[1])[0..0]. The "" literal does not have this problem.

>> Although I can see how this can trip up new users of D, 
>> personally I
>> prefer things to be just the way they are now. That said, I 
>> wouldn't be
>> against forcing one to write "s is null", if the consensus was 
>> that this
>> would improve D.
>
> "s.ptr is null", actually

The distinction being the case with a non-empty slice starting at 
address 0?


More information about the Digitalmars-d mailing list