On 01.12.2012 14:32, Andrei Alexandrescu wrote:
On 12/1/12 2:35 AM, Ali Çehreli wrote:
Quote: "I'd just throw in that we have a (almost) precise GC that is
used by at least one large project (the VisualD apparently). Though
there were some problems with it. Anyway I'd expect to see it in
upstream by 2.062 at least.".

Ali

Unfortunately Antti-Ville, the student who worked on the GSoC project,
is not to be found. I pinged him to no avail. Hopefully nothing bad
happened to him.

It would be great if someone else in the community took over his github
work.


Andrei

https://github.com/rainers/druntime/tree/precise_gc2 started as a bug fix fork of the GSoC project, but not a lot was kept from it in the end but the main concept. I'm a little disappointed that it didn't catch more interest so far.

Precise garbage collection of the heap only does not help Visual D a lot, the data segment needs to be scanned precisely as well, because it contains a lot of text, tables (e.g. std.uni), COM GUIDs, etc. that make good false pointers. Even worse than for the heap, you don't have a NO_SCAN flag available to skip arrays that contain no pointers at all.

So I patched the compiler to generate type info for the data segment as well emitting (adress,typeinfo) pairs into a separate segment. There is no pull request yet, because it is Windows specific so far (shouldn't be too hard to transfer to other platforms) and it is very specific to the implementation (in contrast to the concept of RTInfo).

To avoid the latter I tried to generate it as the output of an RDInfo(alias var) template to be defined together with RTInfo, but that doesn't work, because

- data inside templates generated into libraries end up as comdats that never get linked in
- references to TLS variables cannot be generated at compile time
- placing the data into a special section to sort it together by the linker is not possible

Any ideas how this could be implemented?

Reply via email to