[:] as empty associative array literal, plus warning for null

Regan Heath regan at netmail.co.nz
Fri Jul 5 02:24:48 PDT 2013


On Fri, 05 Jul 2013 10:13:11 +0100, Dmitry Olshansky  
<dmitry.olsh at gmail.com> wrote:

> 05-Jul-2013 12:55, Regan Heath пишет:
>> On Thu, 04 Jul 2013 20:15:08 +0100, Dmitry Olshansky
>> <dmitry.olsh at gmail.com> wrote:
>>
>>> 04-Jul-2013 19:00, Regan Heath пишет:
>>>> In fact, you can generalise further.
>>>>
>>>> The meaning of if(x) is "compare the value of x with 0" (in C, C++,
>>>> .. ).
>>>>
>>>> The value of x for a pointer is the address to which it points.
>>>> The value of x for a class reference is the address of the class to
>>>> which it refers.
>>>>
>>>> If D's arrays are reference types,
>>>
>>> They are not. It's a half-reference no wonder it has a bit of
>>> schizophrenia now and then.
>>
>> True.  The struct which contains the ptr and length is actually a value
>> type.  I think conceptually however we should be thinking of them as
>> reference types, because.. the array struct is effectively a lightweight
>> wrapper (adding length) around a reference type (ptr).
>>
>>>   then IMO they should exhibit the same
>>>> behaviour.
>>>>
>>>
>>> The behavior should be the most useful and since arr.length != 0 is
>>> what 99% of time a programmer wants to check.
>>
>> IMO, the behaviour should be consistent.  If you code if (x) then the
>> compiler will compare 'x' (not a property of x) to 0.  Doing anything
>> else would be inconsistent and unexpected to anyone from a C background.
>
> Then since slices compared to null by your logic means both ptr and  
> length equal 0. Completely broken idea hence I'd simply propose to  
> disable it.

I think I need to clarify.

I am making 3 statements here:

1. Arrays are a thin wrapper around a reference type (ptr) which add  
safety.  W
2. When you have a thin wrapper you should treat operations on the wrapper  
as the wrapped object in the general case.
3. if (x) should compare x to 0.

Given those statements I have come to the conclusion that if (x) on an  
array should compare x.ptr to 0.

Which of my statements do you disagree with, and why?

R

-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


More information about the Digitalmars-d mailing list