D array expansion and non-deterministic re-allocation
Bartosz Milewski
bartosz-nospam at relisoft.com
Thu Nov 19 14:58:15 PST 2009
Steven Schveighoffer Wrote:
> > In fact, even after reading 4.1.9 I don't know what to expect in some
> > cases. Here's an example:
> >
> > int[] a = [0];
> > auto b = a;
> > a ~= 1;
> > b ~= 2;
> > What is a[1]?
> >
> > Is this considered "stomping" and requiring a re-allocation?
>
> a[1] would be 1 if an MRU cache was introduced. This is exactly the sort
> of problem that the MRU cache is supposed to solve.
>
> What should happen is:
>
> a ~= 1 should allocate in place because its parameters were in the MRU
> cache.
> b ~= 1 should reallocate because the a~=1 should have removed its
> parameters from the MRU cache.
>
Notice that you are using particular implementation detail (MRU cache) to explain the semantics of D arrays. There is a very important distinction between language specification and compiler implementation. Andrei already had to go pretty deep into implementation to describe arrays and slices: You can't define D arrays without talking about shared buffers and memory allocation. I don't think including the description of the MRU cache in the language specification is the right solution. But I'm afraid an abstract definition of "stomping" might turn out to be quite non-trivial.
More information about the Digitalmars-d
mailing list