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

mta`chrono chrono at mta-international.net
Sun Jun 10 01:47:20 PDT 2012


Am 10.06.2012 01:02, schrieb Timon Gehr:
> 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.

Yes, you're right. And you've also shown that we don't need a new syntax
to accomplish this.


More information about the Digitalmars-d mailing list