Simon Peyton-Jones wrote:
> | [...] put a static table in the executable with
> | information about register and stack usage indexed by procedure return
> | point, and use that to unwind the stack and find roots.
>> Every accurate garbage collector (including GHC's) uses a technique like
> this, but the solution is invariably tightly-coupled to the garbage
> collector, compiler and run-time system.
Okay, I don't know what I was thinking when I wrote that no languages that
compile via C use compacting collectors, since obviously lots of them do.
But they do it by using various hacks to force local heap pointers into
locations where the GC can find them. Most of this effort is wasted, because
the local variables disappear before the GC runs. What I'm talking about is
idiomatic C code which manipulates heap pointers like any other object, and
which can be optimized as usual (e.g. holding heap pointers in callee-saved
registers across function calls) without causing GC problems. There's no
reason in principle that this couldn't be done.
-- Ben