digitalmars.D - Multiple, Interacting GCs
- Russ Lewis (27/27) Jun 09 2004 IMHO, what we need (perhaps in 2.0) is the ability to have multiple GCs
IMHO, what we need (perhaps in 2.0) is the ability to have multiple GCs
in a program, each managing its own heap. When any GC detects a
reference which points into some other heap, it does NOT perform GC on
that other heap, but it will TELL the other heap about the reference.
This allows the latter heap to know that some of its objects are not
garbage (or that they are) even when some references are references
coming in from other heaps.
Phobos would provide a single, basic GC (probably the one that currently
exists) which would function as the "root" GC. It would also include a
stub GC which calls C-style allocators (a non-GC).
I would propose this sort of syntax:
class MyGC : GC { ... }
MyGC myGC = new MyGC;
class Foo { ... }
Foo foo = myGC.new Foo; // this is allocated by 'myGC'
Foo f2 = new Foo; // this is allocated by the phobos GC
Foo f3 = std.gc.nonGC.new Foo; // this is allocated by malloc()
(Incidentally, in the example above, you notice that the 'myGC' object
would be allocated by the standard heap allocator and thus its lifetime
is managed by the standard Phobos GC.)
If the user explicitly deletes an object, they don't have to specify
which GC should do the delete; the appropriate GC is automatically
determined:
delete foo; // since foo refers to an object in 'myGC's heap,
// 'myGC' handles deletion
delete f2; // phobos deletes this
delete f3; // 'nonGC' calls free() here
Jun 09 2004








Russ Lewis <spamhole-2001-07-16 deming-os.org>