On 02/27/2012 01:17 PM, Justin Whear wrote:
> On Mon, 27 Feb 2012 17:44:40 -0300, Pedro Lacerda wrote:
>
>> The expression "[] is null" evaluates to true here using 2.058, but I
>> expected to be false. What am I missing?
>>
>> Pedro Lacerda
>> <div>The expression&quot;[] is null&quot; evaluates to true here using
>> 2.058, but I expected to be false. What am I
>> missing?</div><div><br></div><div>Pedro Lacerda</div><br> The expression
>> "[] is null" evaluates to true here using 2.058, but I expected to be
>> false. What am I missing?
>>
>> Pedro Lacerda
>> <div>The expression&quot;[] is null&quot; evaluates to true here using
>> 2.058, but I expected to be false. What am I
>> missing?</div><div><br></div><div>Pedro Lacerda</div><br>
>
> null makes sense to me.

But null also means uninitialized (for reference types anyway). Is a slice that has just become empty is uninitialized?

> If the length is null, where can the ptr member
> point to other than null?

Since .ptr should not be derefenced, it can point to anywhere.

void main()
{
    int[] a = [ 1, 2 ];
    a = a[0..0];

    // Both of these pass
    assert(a is null);
    assert(a.ptr !is null);
}

And I think that's another problem: If a.ptr is non-null, then the memory occupied by the initial elements will not be freed by the GC.

> Plus, anyone coming from C uses null to signify
> empty

Not necessarily. A C data structure may contain no elements and be non-null.

> and anyone coming from Lisp uses the empty list to signify Nil.

Ali

Reply via email to