Containers

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Thu Sep 3 12:45:46 PDT 2015


Any interest in having these in Phobos?

https://github.com/bitwise-github/d-containers

Phobos doesn't currently have a Queue(T), and Array(T) leaves 
much to be desired. The containers I've built are very full 
featured, fast, and are unittested fairly thoroughly. I intend to 
add range checking to both containers as well. Inspiration was 
taken from C++'s vector and queue, C#'s generic List and Queue, 
and D's Array.

I'm not sure how the container's I've built would be integrated 
though. They do go against the current container spec, but for 
good reason.

The container spec says containers should be reference types, but 
I guess this clashed with the idea of Phobos being @nogc so 
someone tried to make Array(T) ref counted. The result is 
std.container.Array being a struct with an instance of RefCounted 
inside it, which is bad for performance, but also inflexible. 
Innocent looking code like the following will do 2 separate 
allocations: One for the RefCounted payload, and one for the 
Array's data. On top of being a performance hit, it doesn't allow 
the user to choose how they want to manage memory.

Array!int a = Array!int(1, 2, 3);    //  2 allocations, or else!  
 >:D

The containers I've built are simple value types with a postblit. 
Using this as a base, one can simply use the container as-is if 
they like(which I do), but it's also trivial to make either a 
ref-counted version, or GC version.

See here for example:
https://github.com/bitwise-github/d-containers/blob/master/main.d

     Bit




More information about the Digitalmars-d mailing list