Feature Request: Linked Arrays
Robert Fraser
fraserofthenight at gmail.com
Thu May 1 23:07:51 PDT 2008
downs wrote:
> Since one of D's weaknesses is bad speed when appending to dynamic arrays, I've been thinking about a way to fix this.
>
> Linked arrays are a hybrid between flat arrays and linked list: a single linked list of array chunks.
>
> Basically, a linked array (syntax: T[>], new T[50>]) looks like this:
>
> struct LinkedArray {
> void* start;
> size_t my_length;
> size_t length();
> LinkedArray* nextBlock, lastBlock;
> }
>
> When appending to a LinkedArray, it is first checked if the current block can be grown to accomodate the new member(s) *without* reallocating.
>
> If it can't, instead of reallocating and copying, a new LinkedArray is tacked on the end.
>
> Because of this, there is never redundancy as with current arrays, and the load on the GC can be vastly reduced.
>
> Appending is also much closer to linear than with current arrays. This makes Linked Arrays highly suitable for queues and buffers.
>
> On the other hand, they're completely incompatible with C libraries, don't expose a .ptr property (not flat), and because of the complexities of their layout, all slices have to be constant (value, not reference).
>
> But these disadvantages are, imho, more than made up by the benefits they'd offer as an alternative to current arrays.
>
> Also, they don't need new keywords :)
>
> Whaddya think?
>
> --downs
I'd rather ask the GC to expose a canExpand() method and have it
implemented in the library.
More information about the Digitalmars-d
mailing list