[phobos] RFC: Sealed RandAA
David Simcha
dsimcha at gmail.com
Sat Jan 29 13:35:06 PST 2011
I've also uploaded some documentation to
http://cis.jhu.edu/~dsimcha/randaasealed.html, though interface-wise
it's just a standard AA implementation, so there's not much to
document. Please comment.
On 11/20/2010 2:14 PM, David Simcha wrote:
> 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