]> git.llucax.com Git - personal/website.git/blob - source/blog/posts/2010/07/28-presenting-cdgc.rst
Update resume with The Podcast App
[personal/website.git] / source / blog / posts / 2010 / 07 / 28-presenting-cdgc.rst
1 Title: Presenting CDGC
2 Tags: en, d, dgc, gc, cdgc, intro, git, repository
3
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 :)
8
9 __ http://git-scm.com/
10 __ https://git.llucax.com/w/software/dgc/cdgc.git
11 __ www.digitalmars.com/d/
12 __ http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29
13
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:
16
17 __ http://www.dsource.org/projects/tango/browser/tags/releases/0.99.9/tango/core/rt/gc/basic
18
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
26   ``sentinel`` [bool]).
27 * Other non user-visible cleanups.
28
29 __ http://d.puremagic.com/issues/show_bug.cgi?id=3463
30
31 The configuration is done via the ``D_GC_OPTS`` environment variable, and the
32 format is::
33
34    D_GC_OPTS=opt1=value:opt2=value:bool_opt:opt3=value
35
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
41 moment).
42
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.
46
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.
50
51
52 .. vim: set et sw=3 sts=3 :