dsimcha Wrote:

> == Quote from Bartosz Milewski (bartosz-nos...@relisoft.com)'s article
> > > int[] a = [0];
> > > auto b = a;
> > > a ~= 1;
> > > b ~= 2;
> > > What is a[1]?
> > >
> > > Is this considered "stomping" and requiring a re-allocation?
> > Can this question be answered without the recourse to implementation, and 
> > the
> MRU cache in particular?
> > I thought about an abstract definition of "stomping".Something like that: 
> > The
> expanded part of the array is never implicitly shared with any other array. 
> But
> I'm not sure about this case:
> > int[] a = [1, 2, 3];
> > int[] b = a[0..1];
> > b ~= 4;
> > what is a[1]?
> > By my definition, this would be considered stomping, but I couldn't find 
> > this
> example in TDPL.
> 
> a[1] == 2.  The MRU cache stores both the pointer and the length.  When you
> attempt to append to b, the MRU is searched.  No array that starts at b.ptr 
> and
> has length b.length is found.  b is reallocated.

Consider there is also c:

  int[] c = b[0..1];

According to the above definition, after b~=4 'b' would be relocated and b[0] 
would be disjoint from c[0].

Now consider that a's definition is changed to just [ 1 ].

If I understand this correctly, then b.ptr and b.length would match the 
original array, and in this case b ~= 4 operation might not relocate b, and 
b[0] and c[0] would refer to the same element.

A change in 'a' would be defining the relation between b and c.

Ali

Reply via email to