On Friday, 21 November 2014 at 08:02:07 UTC, philippecp wrote:
The problem is I'm not sure how much of those principles can be
applied to D. I can see moving objects being problematic given
that D supports unions.
Unions make up only a small percentage of all objects; a mostly
precise GC can be enough. It cannot be fully precise anyway,
because of C code (addRoot), and the stack, which is hard to make
precise.
On a related note, I've wondered for a long time why D's GC
isn't
generational and why there's all this discussion on making it
concurrent and none on making it generational. It seems to me
that making it generational is simpler than making it concurrent
and provides a net win in overall performance while concurrent
only provides a win for real time systems that can't afford long
GC cycles.
There is some work. For example, Rainer Schuetze presented a
precise GC at Dconf, which is a requirement for that. See also
this post by deadalnix, who proposes separating the global
heap(s) from the thread-local ones:
http://forum.dlang.org/thread/[email protected]