On Thursday, 10 July 2014 at 02:51:05 UTC, logicchains wrote:
I was wondering if thread-local GC had been considered an option for making D's GC work better in threaded code? Erlang has this (well, process-local GC, which is closer to fibre-local in D terms) and it seems to work okay, although I don't think Erlang allows shared memory between processes.

If this were possible, it would be particularly useful if it could be combined with nogc to allow the spawning of nogc threads. These could be used for latency-sensitive work, with the guarantee that work done in a nogc thread would never be paused by garbage collection done in other threads.

I really like this idea. It would neatly address my issues with a long-standing pull request for adding provisions to core.thread for creating threads that should not be blocked by the GC on collections. Just add detection in the Thread ctors for the @nogc label and set the appropriate internal flag.

It's still kind of a veneer over potentially risky code, since @nogc code can manipulate references to data in the GC and so be the sole owner of data that will then vanish on the next collection, but it seems a good way to document what's desired and enforce some degree of correctness.

Reply via email to