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

Alex Rønne Petersen alex at lycus.org
Sat Jun 9 17:13:12 PDT 2012


On 10-06-2012 01:02, Timon Gehr wrote:
> 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.

I'd have to agree. There needs to be strong guarantees about this, not 
just "the compiler can/might optimize this".

-- 
Alex Rønne Petersen
alex at lycus.org
http://lycus.org


More information about the Digitalmars-d mailing list