Array literals

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Oct 16 06:34:38 PDT 2008


Steven Schveighoffer wrote:
> "Sergey Gromov" <snake.scaly at gmail.com> wrote in message 
> news:MPG.23615f5e560d4d3f989763 at news.digitalmars.com...
>> Wed, 15 Oct 2008 21:12:31 -0400,
>> Steven Schveighoffer wrote:
>>> "bearophile" <bearophileHUGS at lycos.com> wrote in message
>>> news:gd63sv$2j0t$1 at digitalmars.com...
>>>> Steven Schveighoffer:
>>>>> I think this can be solved even simpler.  Make string literal type be
>>>>> invariant(char)[] instead of static array.  It does not need to be on 
>>>>> the
>>>>> heap.  That would solve lots of IFTI problems too.
>>>> With your idea this syntax:
>>>> auto a = ["Hello", "what"];
>>>> Gives a fixed-sized array of invariant(char)[]. I think that's 
>>>> asymmetric.
>>>> My suggestion works with all arrays, so the array 'a' too becomes/is
>>>> dynamic, keeping the simmetry.
>>> Sure, make the type dynamic for all array literals.  My issue is with 
>>> your
>>> proposal to make the data allocated on the heap.
>>>
>>> There is no need for an array literal to be typed as a static array. 
>>> Ever.
>> I can see one need, matrix literals:
>>
>> auto blah =
>> [
>>  [ 1,  0,  0 ],
>>  [ 0,  0, -1 ],
>>  [ 0, -1,  0 ]
>> ];
>>
>> so that blah is a sequence of 9 numbers accessed accordingly, not 3
>> arrays of arbitrary length each.
>>
>> Well, it's probably a special case and deserves a special, safer syntax.
> 
> Just don't use auto:
> 
> int[3][3] blah = ...
> 
> Make it clear your intention.  A literal should follow the most common 
> usage, and leave the corner cases to specific syntax.  Most people don't use 
> static arrays when working with literals.  The most common usage of static 
> arrays I've seen is to establish a buffer on the stack:
> 
> byte[1000] buf = void;

Walter wanted to do things that way. I wanted to implement things the 
T[auto] way. The problem with specifying size twice is that there are 
two points of maintenance. If the language can help, why not?

Andrei



More information about the Digitalmars-d mailing list