Setting array length to 0 discards reserved allocation?

Andrew Godfrey via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 29 09:54:46 PDT 2014


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).


More information about the Digitalmars-d mailing list