== Quote from Andrei Alexandrescu (seewebsiteforem...@erdani.org)'s article > Sean Kelly wrote: > > dsimcha Wrote: > > > >> == Quote from Sean Kelly (s...@invisibleduck.org)'s article > >>> dsimcha Wrote: > >>>> I just realized last night that D's templates are probably powerful > >>>> enough now > >>>> to generate bit masks that can be used for precise GC heap scanning. I'm > >>>> halfway (emphasis on halfway) thinking of using this to try to hack the > >>>> GC and > >>>> make heap scanning fully precise except for the corner case of unions. > >>>> However, this ties into several things that others in the D community are > >>>> doing, so I want to gauge people's responses and make sure I'm not > >>>> wasting > >>>> effort on something that will be useless in 6 months. > >>>> > >>>> 1. Sean, Leonardo, whoever else may be working on GC implementations, > >>>> have > >>>> you by any chance broken ground on precise heap scanning already? > >>> I've thought about it, but not done anything about it. The compiler > >>> doesn't > >> provide this information, so precise scanning would require a user-level > >> call. > >> You'll also have to deal with arrays of structs, by the way. > >> > >> Arrays of structs are easy: Generate a bitmask for one element, and keep > >> reusing > >> that bitmask until the end of the block. Am I missing something? > > > > Nope. > One question is, is there enough information for stack variables? My > understanding from a while ago was that heap data could be reasonably > analyzed, but stack data has no info associated with it. > Andrei
That's why I said precise *heap* scanning. This would solve probably 90+% of the problem w/ false pointers without requiring any changes with major ripple effects, i.e. only druntime, not the compiler, would need to be hacked. Admittedly, though, unless you came up w/ some pinning scheme for stack variables and unions, it still wouldn't allow a moving GC. I personally am much more interested in a decent solution to our GC woes now than a perfect one at some point indefinitely far into the future. Right now, when working with programs that use more than maybe 100-200 MB of memory, false pointers become such a problem that the GC is almost useless, yet all kinds of library code still uses the GC heap, which is why I resisted the idea of removing GC.free() so strongly. As I see it, the biggest problem is false pointers, with the fact that every allocation requires a lock in a close second. These are the low-hanging fruit. A moving GC, one that doesn't stop the world on collection, and one that's fully precise including stack would be nice, but they're several orders of magnitude less important and would also have more ripple effects.