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
a...@lycus.org
http://lycus.org

Reply via email to