Pages

Thursday, May 21, 2009

Last night after the release had shipped I created a new branch for continuing my cleanup work in Parrot's garbage collector. The goal of this particular branch is to tackle some of the items in the GC tasklist on the Trac wiki. You'll notice that many items related to GC have been completed already, and I've done a lot of GC work recently that wasn't even planned on this tasklist page. Most of the things left on this list, besides the understated "Create an incremental tri-color mark GC module" task involve simply moving files around. Moving those files around (and hopefully cleaning and streamlining everything just a little bit more) is the goal of the current branch. Once that's done I'll be able to focus more on the Incremental GC core that I've been planning and idly working on for a while now.

The initial implementation of the incremental GC core is going to have some similarities to my GSOC work, but won't be so ambitious. I won't be using separate headers, for instance, and I will be relying on the PObj flags for marking instead of trying to use a separate card for the purpose. Having an incremental GC means that we will need a way to save state between increments, and I'm not entirely certain how I want to do that yet. The current MS core uses a trick to overlay a linked-list structure onto the PMC to maintain a free list. However, we can't really reuse that trick to put items on a "partially marked" list because we can't be overwriting data in the structure willy-nilly. We could add a new pointer field to every PMC for this purpose, but that seems like a bit of a waste to me.

Also, I'm still looking into using the Boehm collector for Parrot, it would be a cool little experiment to see if we could get that working and if so what the performance would look like. Just one more item to toss onto the top of my to-do list!