On 08.09.2012 09:07, Rainer Schuetze wrote:
I happen to have been trying it yesterday and spent the better part of
the day fixing issues (especially with dynamic arrays). I just noticed
there are still problems with associative arrays, but I hope I will have
a pull request today.


It took a little longer than I have hoped for, but I have committed a new branch here: https://github.com/rainers/druntime/tree/precise_gc2

I didn't make it a pull request, because I had to touch almost all of the precise specific code and change a lot more. It is also rebased to current druntime-master, so it is easier to try it out.

Associative arrays are a bit troublesome because they emplace keys and values into memory areas without type information, I guess the gc interface needs to be extended to support handing pointer information to the gc. That would also help emplace!T and others.

The garbage collector works with the test suite and Visual D (that means doesn't crash on Win32, cannot test elsewhere), but unfortunately, it still doesn't collect everything. A source of trouble is the pre-initialized data segment, that contains a lot of GUIDs and strings making good false pointers.

I have a compiler patch to combine all the data that would get a NOSCAN attribute at runtime into a contiguous region, so that it can be excluded from scanning, but I would like to exclude more, i.e. the C runtime library data, noscan areas in TLS and BSS. The compiler still resists against changes to that respect...

Another option could be to generate pointer bitmaps for the data areas at compile time into another segment, but I'm not sure whether the linker could mess up the order in comparison to the actual data segments.

If you like to test it, especially welcome on other platforms, there is a precisegc_test.d in src/gc that should check the basic runtime info generation.

Rainer



Reply via email to