According to the D slice article (https://dlang.org/articles/d-array-article.html), slices do not care where they start, only where they end, when checking whether expanding in place is permitable, or at least that is what I understood regarding it.

Now I'm unsure how to check this, I tried to a bit using the online editor and a bit of pointer usage which seemed to confirm my suspicion, but does this mean that taking a (small) slice at the end of a (possibly) very large dynamic array can lead to problematic behavior?
For example;

int[] a = new int[10]; // Imagine this is very large
int[] b = a[$-1..$];   // Small slice at the end
b ~= 2;                // b extends, possibly in place
a ~= -1; // a no longer can, so the entire array needs reallocating
(instead of be reallocating & a growing in place)

Again I'm not very certain I fully understood how slices are implemented, but is this example, and the problem I imagine it leading to, valid?

Reply via email to