[phobos] RFC: Sealed RandAA

David Simcha dsimcha at gmail.com
Sat Nov 20 11:14:37 PST 2010


I've created a sealed container implementation of RandAA for inclusion 
in std.container.  The code is located at:

http://www.dsource.org/projects/aa/browser/trunk/randAA/randaasealed.d

The main advantages RandAA has over builtin AAs are:

1.  Deterministic, ref counted freeing of memory, which is important for 
huge AAs or very memory-tight systems.

2.  Plays nicely with conservative GC.  Keys, values and hashes are in 
separate arrays, meaning that they don't all get GC scanned just because 
one needs to be GC scanned.  This also saves on alignment overhead.

3.  The implementation is based on parallel arrays, and allows for space 
to be reserved such that a certain number of elements can be added with 
a guarantee of no reallocation.  Because of this, insertions are much 
faster for large arrays.

4.  The linear congruential probing retains its O(1) expected lookup 
time as long as there are minimal collisions in full (32- or 64-bit) 
hash space, regardless of how many collisions there are in modulus hash 
space.

The main disadvantages are:

1.  The combination of parallel arrays and randomized probing wreak 
havoc on cache performance, meaning lookups are somewhat slower than 
with the builtin AA.

2.  The worst-case lookup time is unbounded, though this is more 
theoretical trivial than a practical issue (except maybe in high 
security situations where you shouldn't be using a hash table anyhow).  
The distribution of lookup times is geometric, meaning that requiring 
more than a few probing iterations is absurdly unlikely.

The two main known issues are lack of const correctness (I made no 
attempt and won't bother until inout works reasonably well) and lack of 
64-bit support (because I haven't gotten around to searching for good 
64-bit linear congruential parameters yet).

Please review the code and let me know whether it flies for std.container.

--David Simcha


More information about the phobos mailing list