Array literals

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Oct 16 08:27:24 PDT 2008


Steven Schveighoffer wrote:
> "Andrei Alexandrescu" wrote
>> 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
> 
> Yes, good point.
> 
> What about using static, there's a keyword that screams out 'this is static' 
> :)
> 
> byte[static] = [0,1,2];
> 
> or
> 
> auto[static] = [0,1,2]; // typed as int[3]
> 
> T[auto] could look like you are trying to declare an AA with the key type 
> being inferred.  But of course, that's probably very rare.
> 
> Just playing around ;)  No idea if people would like that syntax, static is 
> already heavily overloaded.

T[$] was also suggested.

Andrei



More information about the Digitalmars-d mailing list