The great slice debate -- should slices be separated from arrays?
Steven Schveighoffer
schveiguy at yahoo.com
Tue Nov 24 13:01:05 PST 2009
On Tue, 24 Nov 2009 15:29:22 -0500, Bartosz Milewski
<bartosz-nospam at relisoft.com> wrote:
> Andrei Alexandrescu Wrote:
>
>> Array may include a field
>>
>> bool sliceExtracted;
>>
>> that is set to true whenever you take a slice from the array and set to
>> false whenever the array's data is reallocated. The array's
>> documentation could mention that ~= is amortized constant if there are
>> no intervening slicing operations.
> In other words, an array may include a field "isUnique" that is set to
> true after every re-allocation and turned off whenever the compiler
> can't prove uniqueness--e.g., when a slice is taken. This "dynamic
> uniqueness" is different from "static uniqueness". The latter could be
> made part of the type system and checked at compile time, but the former
> might be just enough for the purpose of optimization.
>
> What is important is that it would clear the semantics of array
> expansion--it would always predictably break the connection to its
> slices, if any. Note also that if slices are just two pointers, they
> will never dangle because the GC will guarantee that the original is not
> recycled as long as somebody is pointing into it.
>
> If this could be implemented, I'd feel much better about D arrays.
I'll add this to my opinion on Andrei's idea: If Array is a suplementary
type in addition to slices (that is, appending to slices is still
possible, and do not necessarily reallocate on appending), then I agree
this is along the right lines for an appending array type used to build
arrays as efficiently as possible.
-Steve
More information about the Digitalmars-d
mailing list