Go, D, and the GC

rsw0x via Digitalmars-d digitalmars-d at puremagic.com
Sun Oct 4 14:40:58 PDT 2015


On Sunday, 4 October 2015 at 21:01:45 UTC, Jonathan M Davis wrote:
> 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

Most of these issues are addressed by fleshing out shared, it was 
already put as a 'priority' last year by Andrei but nothing was 
ever done.

If you design a language around having a GC, but do not provide 
GC friendly mechanisms, the GC will never be good for the 
language. Java would never have a GC better than a simple mark 
and sweep GC if it didn't provide help to the GC.
Designing shared around the GC just happens to be a way to do it 
without affecting the runtime performance of D at all unlike e.g, 
pointer barriers. If D has no intentions of aiding the GC, then 
the GC should just be dropped because it's basically just 
slapping Boehm on C++ right now.

bye.


More information about the Digitalmars-d mailing list