I don't like slices in D
Vitali
notavailable at mail.com
Fri Oct 18 06:38:00 PDT 2013
On Thursday, 17 October 2013 at 22:30:52 UTC, Jonathan M Davis
wrote:
> http://dlang.org/d-array-article.html
>
> It should be enlightening.
Yes, now I understand this article, but only after I had this
long discussion here. The relevant statement for me is "The
responsible party for managing a dynamic array's memory is the D
runtime." For me this means that the programmer isn't suppose to
manage allocation and reallocation of the array, because it is
abstracted by the slices. Well, if it's so, then I have doubts
that it will help to write performant code, BECAUSE of the
abstraction.
With this in mind I take back everything I said about slices and
leave only a doubt that slices are performant.
---
To clarify previous things:
Whether the concatenation "~=" appends without or with
reallocation, depends on the available capacity of the left
slice. The concatenation "~" never reallocates and creates always
a new slice with capacity of 0.
My prevoius example of the function "removeElement(ref int[],
int)" will not work. The right implementation would be:
void removeElement(ref int[] arr, int index) {
arr[index..$-1] = arr[index+1..$].dup;
arr.length--;
arr.assumeSafeAppend();
}
More information about the Digitalmars-d
mailing list