Go, D, and the GC

Jonathan M Davis via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 4 14:01:43 PDT 2015


On Sunday, 4 October 2015 at 17:30:39 UTC, rsw0x wrote:
> I still say it's worth investigating a thread-local GC by 
> taking advantage of the fact that shared has never really been 
> properly fleshed out. This would heavily play to D's TLS by 
> default, and preferring message passing over shared data.

That would be ideal but gets really nasty for a number of reasons 
- primarily having to do with casting. It's perfectly possible to 
cast to and from shared and much easier to create something as 
thread-local and then cast it to shared than to create it as 
shared, so you very quickly run into problems with objects being 
created on heap but really needing to be used on another. Another 
major issue is message passing, because in order to avoid 
copying, you basically need a way to move an object from one 
thread-local heap to another. Right now the way you'd do it is to 
cast to immutable to pass the object and cast it back to mutable 
on the other side (which is _far_ from ideal). Using shared would 
be better, but the last time I checked, Variant has issues with 
it so that that didn't work with std.concurrency. Regardless, the 
fact that you're casting to pass across threads again runs into 
issues with objects being created on a particular heap but then 
needing to be moved to another. _Maybe_ that could be resolved by 
making casting to and from shared do a lot more work underneath 
the hood, but that get's _really_ complicated when you start 
having objects that refer to other objects and the like.

So, having a thread-local GC _sounds_ like a great idea, but it's 
not at all clear that we can actually pull it off given how much 
you're allowed to do in D. There can be some serious downsides to 
not placing major restrictions on the user like languages like 
Java or Go tend to do.

- Jonathan M Davis


More information about the Digitalmars-d mailing list