On Fri, Dec 07, 2012 at 05:42:18PM +0100, bearophile wrote:
> H. S. Teoh:
> 
> >Workarounds:
> >- Use items.dup. Problem: if you're passing an actual array to the
> >  ctor, it's unnecessary and inefficient.
> >
> >- Use an array literal: auto x = Array!int([1,2,3]);, which I believe
> >  should allocate the array on the heap, and so you're safe to just
> >  copy the slice. This defeats the purpose of the "items..." syntax,
> >  though.
> 
> I think the right solution is to fix the design+compiler, because
> it's safer.

Agreed.


> (But how do you get the original GC-less behaviour if you need max
> performance and you know what you are doing?)
[...]

I think there's already an issue open where the compiler should warn you
of escaping reference to stack arguments. So the variadic arguments
syntax will work for the GC-less case, but when you need a GC you have
to explicitly make a heap array, e.g. using an array literal.

The problem comes because there is an ambiguity between runtime stack
slices and heap slices, which are conflated under a single syntax. When
there is no escaping reference, it doesn't matter which two they are,
but when there is, there's a problem.


T

-- 
Microsoft is to operating systems & security ... what McDonalds is to gourmet 
cooking.

Reply via email to