Setting array length to 0 discards reserved allocation?
via Digitalmars-d
digitalmars-d at puremagic.com
Tue Jul 29 13:06:26 PDT 2014
On Tuesday, 29 July 2014 at 16:54:48 UTC, Andrew Godfrey wrote:
> On Tuesday, 29 July 2014 at 08:41:48 UTC, Marc Schütz wrote:
>> On Tuesday, 29 July 2014 at 07:46:34 UTC, Andrew Godfrey wrote:
>>>
>>> I gave this a try, and overall it looks like an improvement,
>>> but I think we need another name than "slice". The reason is
>>> that the slice operator is a distinct thing and interacts
>>> with the "slice" in strange ways. When I next get time I'll
>>> try updating it to use the term "array reference". That is:
>>>
>>> int[] a; // defines an array reference, a
>>> int[3] b;
>>> a = b[1..3]; // updates the array reference a to refer to a
>>> slice of b
>>
>> IMO slice fits quite well for both. `b[1..3]` is a slice (or
>> refers to one?), and `a` is, too. After the assignment, both
>> slices are equal. But I see that there is an ambiguity when we
>> talk about "copying a slice", which could also be interpreted
>> as "copying what the slice refers to".
>
> That wasn't meant to be a motivating example.
> The totality of what I have so far is really what makes me
> think this - it's too big to share here, but I suppose I could
> submit a PR for rejection?
>
> Here's an attempt at a short motivating example:
>
> int[3] a = [1, 0, -1];
> int[] b = a;
> int[] c = new int[4];
>
> b[] = c[1..4];
> assert(a[2] == 0);
>
> // Using the proposed 'slice' term, an exhaustive
> description of the above operation is:
> // This copies a slice of the slice c onto the slice b
> (which refers to a).
> //
> // If we instead call b and c "array references", the
> description reads:
> // This copies a slice of the array referenced by c, onto
> the array referenced by b (which is a).
Playing the devil's advocate:
Yes, it does so by assigning a slice from `c` to a slice from `b`.
More information about the Digitalmars-d
mailing list