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

Regan Heath regan at netmail.co.nz
Fri Jul 5 07:50:07 PDT 2013


On Fri, 05 Jul 2013 11:39:37 +0100, Dmitry Olshansky  
<dmitry.olsh at gmail.com> wrote:
> 05-Jul-2013 13:24, Regan Heath пишет:
>> 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.
>
> Rather it packs 2 pointers (pair: ptr, ptr+len), modeling the region in  
> between.

True, but the actual implementation isn't the issue.  The concept of D's  
arrays was to wrap pointers in order to make them safer.  So,  
/conceptually/ an array is a thin wrapper over a pointer.  Concept defines  
semantics, rather than implementation, IMO :)

>> 2. When you have a thin wrapper you should treat operations on the
>> wrapper as the wrapped object in the general case.
>
> Continuation of the above stretch.
> To be a true wrapper it has to support only the same or subset of  
> operations. For instance arrays have slicing operation hence it's more  
> then that.

To my mind wrappers aren't limited in such a way and can add  
functionality, the key to me is that they continue to expose the  
underlying object, which d's arrays do (in various ways).

R

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


More information about the Digitalmars-d mailing list