[Haskell] ANNOUNCE: jhc 0.7.4
nominolo at googlemail.com
Mon Jul 26 19:42:27 EDT 2010
> * a garbage colletor which can be enabled with '-fjgc' is available.
> after some more testing, I will make it the default in the 0.7.5 release.
> * A new memory allocator based on Jeff Bonwick's slab memory allocator for
> kernels. This means that in many cases, memory can be pulled off a slab
> and immediately used with no initialization, in addition, it allowed a
> rearrangement of the GC meta-data to optimizally use the cache.
That sounds like you're essentially using BIBOP (big bag of pages,
http://www.memorymanagement.org/glossary/b.html#bibop). Did you
compare the overheads with the header-based scheme? Do you still need
a tag/header word or do you get the tag by looking up the per page
info? Do you use this scheme for all objects or only for small
objects? I could imagine a hybrid scheme where where you use bibop
for, say, single-constructor objects, although I wonder how you would
deal with thunks and their update.
> * packed representation of algebraic types, 'Maybe Foo' is actually
> represented in memory as a NULL pointer or just a 'Foo' with no tag bits.
> Combined with the slab allocator, this can double the number of some common
> values that can be put in a cache line.
Interesting. How do you distinguish 'Just e' from 'Just _|_'? Do
you need the whole program assumption to disprove that the latter case
More information about the Haskell