Andrei Alexandrescu:
http://www.reddit.com/r/programming/comments/1fpw2r/dconf_2013_day_2_talk_5_a_precise_garbage/
Another thing to keep in account while designing a more precise
garbage collection is a possible special casing for Algebraic
(and Variant, and more generally for some standardized kind of
tagged union):
http://d.puremagic.com/issues/show_bug.cgi?id=5057
In an Algebraic there is run-time information for the GC to
decide if inside it there are pointers to follow or not. It's
mostly a matter of letting the GC recognize and use such
information.
Bye,
bearophile