2 Tags: en, d, dgc, gc, cdgc, intro, git, repository
4 I've just published the git__ repository__ of my D__ GC__ implementation: CDGC.
5 The name stands for *Concurrent D Garbage Collector* but right now you may call
6 it *Configurable D Garbage Collector*, as there is no concurrency at all yet,
7 but the GC is configurable via environment variables :)
10 __ http://git.llucax.com.ar/w/software/dgc/cdgc.git
11 __ www.digitalmars.com/d/
12 __ http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29
14 It's based on the `Tango (0.99.9) basic GC`__, there are only few changes at the
15 moment, probably the bigger ones are:
17 __ http://www.dsource.org/projects/tango/browser/tags/releases/0.99.9/tango/core/rt/gc/basic
19 * Runtime configurability using environment variables.
20 * Logging of malloc()s and collections to easily get stats about time and space
21 consumed by the GC (option ``malloc_stats_file`` [str] and
22 ``collect_stats_file`` [str]).
23 * Precise heap scanning based on the patches published in `bug 3463`__ (option
24 ``conservative`` [bool]).
25 * Runtime configurable debug features (option ``mem_stomp`` [bool] and
27 * Other non user-visible cleanups.
29 __ http://d.puremagic.com/issues/show_bug.cgi?id=3463
31 The configuration is done via the ``D_GC_OPTS`` environment variable, and the
34 D_GC_OPTS=opt1=value:opt2=value:bool_opt:opt3=value
36 Where ``opt1``, ``opt2``, ``opt3`` and ``bool_opt`` are option names and
37 ``value`` is their respective values. Boolean options can omit the value (which
38 means *true*) or use a value of ``0`` or ``1`` to express *false* and *true*
39 respectively. String options have no limitations, except they can't have the
40 ``:`` char in their values and they have a maximum value length (255 at this
43 At the moment is a little slower than the Tango basic GC, because the precise
44 scanning is done very naively and a lot of calls to ``findPool()`` are done.
45 This will change in the future.
47 There is **a lot** of work to be done (cleanup, optimization and the concurrent
48 part :), but I'm making it public because maybe someone could want to adapt some
49 of the ideas or follow the development.
52 .. vim: set et sw=3 sts=3 :