Array literals
Steven Schveighoffer
schveiguy at yahoo.com
Thu Oct 16 08:02:50 PDT 2008
"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.
-Steve
More information about the Digitalmars-d
mailing list