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.