On Thu, 17 Oct 2013 23:45:18 -0400, Ali Çehreli <[email protected]> wrote:
On 10/17/2013 03:33 PM, Sean Kelly wrote:
> I'd be curious to see if this would ever relocate:
>
> int[] dArr = [10,11,12];
> const(int)[] dSlice = dArr[0..2];
> dSlice.length++;
>
> It shouldn't, since growing a const slice can never clobber the
> underlying array,
However, according to spec, the appended elements must be 0. There is an
optimization opportunity if the elements beyond dSlice's end were all
zeros and if the type system guaranteed that they were immutable. Only
then dSlice's relocation could be elided.
(catching up on D forums)
Ali is correct, the above code will always reallocate. Underneath, the
array runtime has no specialized code to deal with const, only shared.
In reality, the dSlice.length++ line is equivalent to doing:
dSlice ~= int.init;
for all flavors of const.
-Steve