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.