On Sun, 18 Dec 2011 18:42:31 -0500, Jonathan M Davis <jmdavisp...@gmx.com> wrote:

On Sunday, December 18, 2011 22:12:07 RenatoL wrote:
Reading the book from Alexandrescu we can find this (page 103-104,
at least in my edition):

Expanding arrays has a couple of subtleties that concern possible
reallocation of the array. Consider:

auto a = [87, 40, 10, 2];
auto b = a; // Now a and b refer to the same chunk
a ~= [5, 17]; // Append to a
a[0] = 15; // Modify a[0]
assert(b[0] == 15); // Pass or fail?

it seems natural that the test is ok but it is not... if we read
more we find:
"D leaves~= the freedom of either expanding by reallocation or
opportunistically expanding in place if there is enough unused
memory at the end of the current array."

At a first glance this seems to be a serious issue... it seems hard
to accept that b can lost its connection to "a" in a silent mode due
to a reallocation

Is there a safe mode to do this for large arrays?

Read this: http://www.dsource.org/projects/dcollections/wiki/ArrayArticle

In particular, this section covers the issue:

http://www.dsource.org/projects/dcollections/wiki/ArrayArticle#Determinism

And this section covers the additional functions that give you more info about the underlying array type:

http://www.dsource.org/projects/dcollections/wiki/ArrayArticle#SliceMembersandtheAppender

-Steve

Reply via email to