[ Oops that one got the wrong address, resent ]
-------- Original Message -------- To: perl6-internals-subscribe ...
----
Some remarks
0) Parrot's nomenclature DOD vs GC is a bit misleading. The "DOD" subsystem is the stop-the-world mark & sweep collector that recycles object headers. The "GC" is the copying collector for variable sized string and other buffer memory. The incremental mark & sweep collector (src/gc_ims.c) is an alternative for the DOD thingy and reuses some code in src/dod.c.
We need to go incremental because arbitrary long pauses during stop-the-world are not convenient for interactive programs. BTW a refcount scheme can also suffer from long pauses. Albeit refcounting is very incremental during normal operation, it can pause arbitrary long, if decrementing one refcount causes the cleanup of an huge amount of other objects (like in C< @huge_array = undef >)
1) The incremental garbage collector is functional, it passes all tests
2) Its totally untuned but should run with reasonable incremental timing and memory requirement. And its probably[1] not faster then stop-the-world, it just does its work in small steps but still has to do all the work.
3) The copying collector isn't integrated yet. But that should be easy. After finishing sweep and if there is some possible wastage in the memory pools, these get compacted.
Please give it a try. C<include/parrot/settings.h> has two defines to turn one on and one off.
leo
[1] cache coherency for incremental could be better.