On 12/11/2011 11:21 AM, Andrei Alexandrescu wrote: > On 12/11/11 9:14 AM, Chad J wrote: >> >> I think one thing that could would be (optional) reference counting for >> transitively atomic types. Of course, this is just another kind of >> garbage collection, but it is /deterministic/ and parallelizes well, and >> I bet this would open up a large amount of Phobos while the >> stop-the-world collector is offline, and with little or no code change. > > I think the language has enough (in theory) and nearly enough (in > practice) expressiveness to implement reference counted classes in a > library, virtually transparently. I mean one could define a template > RefCounted (an extended version of what's now in std) such that this > pattern is possible: > > // client code > class WidgetImpl { > ... > } > > alias RefCounted!WidgetImpl Widget; > > Aside from using WidgetImpl in type relationships, using Widget would > transparently insert the appropriate reference counting without > otherwise interfering with normal WidgetImpl semantics. > > > Andrei
This is good. So stick it in the runtime and make the compiler emit RefCounted!___ templates whenever it finds a transitively atomic type. This can be done alongside the existing garbage collector. Then we can benchmark different combinations of memory management strategies. Two compiler flags can work in tandem: -nogc -norefcount (Turn them both off if you really want to break Phobos.)