On Tuesday, 11 February 2014 at 10:29:58 UTC, thedeemon wrote:
On Tuesday, 11 February 2014 at 04:36:28 UTC, Adam Wilson wrote:

The GC itself is an orthogonal issue to the compiler. The way I see it, once the compiler can output precise information about the heap, stack, and registers, you can build any GC you want without the compiler requiring any knowledge of the GC.

If you want a fast GC it needs to be generational, i.e. most of the times scan just a portion of heap where young objects live (because most objects die young), not scan whole heap each time (as in current D GC). However in a mutable language that young/old generation split usually requires write barriers: compiler must emit code differently: each time a pointer field of a heap object is mutated it must check whether it's a link from old gen to young gen and remember that link (or just mark the page for scanning). So to have a generational GC in a mutable language you need to change the codegen as well. At least this is how most mature GCs work.

D code has different allocation patterns from Java and C#. In idiomatic D, young GC-allocated objects are probably much fewer.

Reply via email to