[Haskell] ANNOUNCE: jhc 0.7.4

Thomas Schilling nominolo at googlemail.com
Mon Jul 26 19:42:27 EDT 2010


Great work.

>  * 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
can happen?

/ Thomas


More information about the Haskell mailing list