static array literal syntax request: auto x=[1,2,3]S;

Timon Gehr timon.gehr at gmx.ch
Sat Jun 9 16:02:40 PDT 2012


On 06/10/2012 12:34 AM, Jonathan M Davis wrote:
> On Sunday, June 10, 2012 00:15:01 Timon Gehr wrote:
>> D static array literals don't perform a costly heap allocation. It is
>> simply a bug in the implementation. This is not a compelling reason to
>> add new syntax.
>
> D

DMD

> doesn't _have_ static array literals. It only has dynamic array literals.
>
> int[5] a = [1, 2, 3, 4, 5];
>

This is a static array literal.

> should definitely be optimized such that it doesn't do any heap allocations,
> but the array literal itself is dynamic regardless, as typeof indicates.

I don't see a typeof there. The array literal is a static array literal 
if it is assigned/converted to a static array.


> The
> other place that this causes problems is templated functions. e.g.
>
> void func(A)(A array)
>      if(isStaticArray!A)
> {}
>
> func([1, 2, 3, 4, 5]);
>
> will fail to compile. You're forced to create one on the stack first.
>
> int[5] array = [1, 2, 3, 4, 5];
> func(array);
>

func(cast(int[5])[1,2,3,4,5]);

> That _might_ merit adding a syntax for indicating that an array literal is
> static.
>

Yes, certainly. I was simply pointing out that arguing about performance 
makes a poor case here.

> However, in general, it's definitely true that the additional heap allocations
> that we currently see should just be optimized out by the compiler, and if
> that's all that we're trying to solve, then that's a matter of fixing the
> optimizer, not the language.
>

This is not about optimization. Allocating is simply incorrect. It is a 
'wrong code' bug.


More information about the Digitalmars-d mailing list