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

Steven Schveighoffer schveiguy at yahoo.com
Thu Jul 4 06:25:21 PDT 2013


On Thu, 04 Jul 2013 08:42:50 -0400, Timon Gehr <timon.gehr at gmx.ch> wrote:

> On 07/04/2013 01:50 PM, Steven Schveighoffer wrote:
>> On Thu, 04 Jul 2013 05:25:30 -0400, Regan Heath <regan at netmail.co.nz>
>> wrote:
>>
>>> On Wed, 03 Jul 2013 19:10:40 +0100, bearophile
>>> <bearophileHUGS at lycos.com> wrote:
>>>> Telling apart the literal for an empty array from the literal of a
>>>> empty but not null array is a bad idea that muds the language. And
>>>> thankfully this currently fails:
>>>>
>>>> void main() {
>>>>      int[] emptyArray = [];
>>>>      assert(emptyArray !is null);
>>>> }
>>>
>>> As this comes up often you're probably aware that there are people
>>> (like myself) who find the distinction between a null (non-existant)
>>> array and an empty array useful.
>>
>> Nobody questions that.  The biggest problem is making if(arr) mean
>> if(arr.ptr) instead of if(arr.length)
>>
>
> if(arr.ptr) is what it means now.

I know, and that is a problem.

-Steve

>> What [] returns should not be an allocation.  And returning null is a
>> reasonable implementation of that.
>
> static __gshared void[1] x;
> return x[0..0];

That's also a valid solution, along with:

void *x = null;
return x[0..0];

-Steve


More information about the Digitalmars-d mailing list