Array literals

Steven Schveighoffer schveiguy at yahoo.com
Thu Oct 16 06:29:35 PDT 2008


"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;

-Steve 





More information about the Digitalmars-d mailing list