A separate GC idea - multiple D GCs

rikki cattermole rikki at cattermole.co.nz
Fri Jan 21 14:09:18 UTC 2022


On 22/01/2022 2:56 AM, Chris Katko wrote:
> So a related question: Has anyone ever thought about "thread-local 
> garbage collection" or some sort of "multiple pool [same process/thread] 
> garbage collection"? The idea here is, each thread [or thread 
> collection] would have its own garbage collector, and, be the only 
> thread that pauses during a collection event.

Indeed we have thought about this.

What I want is a fiber aware GC and that implicitly means thread-local too.

But I'm not sure it would be any use with the existing GC to have the 
hooks, it would need to be properly designed to take advantage of it.

> Because while an "iterative GC" requires... an entire new GC.

The existing GC has absolutely horrible code.

I tried a while back to get it to support snapshotting (Windows specific 
concurrency for GC's) and I couldn't find where it even did the scanning 
for pointers... yeah.

https://github.com/dlang/druntime/blob/master/src/core/internal/gc/impl/conservative/gc.d

After a quick look it does look like it has been improved somewhat with 
more comments since then.



What we need is a full reimplementation of the GC that is easy to dig 
into. After that, forking, precise, generational should all be pretty 
straight forward to implement.


More information about the Digitalmars-d mailing list