Implementace garbage collectoru

Implementace garbage collectoru
« kdy: 15. 03. 2013, 19:55:20 »
Dobry den,
Potreboval by som pomoct s implementaciou garbage colektoru.
Moj jazyk je podobny s C# (triedy su referencne typy odvodene od bazovej triedy 'object' a su alkovne na heape).
Frontend mam naprogramovany v c++ a ako backend pouzivam llvm 3.1, program spustam cez JIT (lli).
GC by mal byt inkrementalny, nemusi byt thread safe.
Postupujem podla tohto: http://llvm.org/docs/GarbageCollection.html#getting-started

Citace
Write a runtime library or find an existing one which implements a GC heap:

1. Implement a memory allocator.
2. Design a binary interface for the stack map, used to identify references within a stack frame on the machine stack.*
3. Implement a stack crawler to discover functions on the call stack.*
4. Implement a registry for global roots.
5. Design a binary interface for type maps, used to identify references within heap objects.
6. Implement a collection routine bringing together all of the above.

bod 1: pouzivam malloc a zatial funguje ok.

Dalej nechampem ak implementovat stack map a co to vlastne je?
« Poslední změna: 15. 03. 2013, 21:06:03 od Petr Krčmář »


Rax

Re:Implementace garbage collectoru
« Odpověď #1 kdy: 15. 03. 2013, 22:56:26 »
Jak se to implementuje nevím, ale patrně je to mechanismus jak se LLVM dozví o živých referencích v rámci stacku, stack obvykle tvoří lokální proměnné ve funkcích a metodách + jejich parametry a návratové hodnoty (mimo jiné).

monitor

Re:Implementace garbage collectoru
« Odpověď #2 kdy: 16. 03. 2013, 05:22:05 »
Co je to stack map?
Viac info na prvom odkaze tu:
http://lmgtfy.com/?q=stack+map+gc&l=1

(u mna to je stranka: http://penberg.blogspot.sk/2009/07/garbage-collection-and-jit.html)

Okrem toho, cosi pisu aj dalej na tej tvojej stranke:
http://llvm.org/docs/GarbageCollection.html#computing-stack-maps

A co tak sa inspirovat niecim podobnym:
http://vmkit.llvm.org/

PO prestudovani ich zdrojakov, nie je hned vsetko jasnejsie? :-)

monitor

Re:Implementace garbage collectoru
« Odpověď #3 kdy: 16. 03. 2013, 09:43:59 »
Aha,  a este na konci toho "Getting started" je rovno povedane:


To help with several of these tasks (those indicated with a *), LLVM includes a highly portable, built-in ShadowStack code generator. It is compiled into llc and works even with the interpreter and C backends.

A co je oznacene hviezdickou? Veci okolo stacku (2., 3.)...
Takze sa treba pozriet na ten ShadowStack

Re:Implementace garbage collectoru
« Odpověď #4 kdy: 16. 03. 2013, 11:01:42 »
Tak uz som si daco vyhladal. Stack map je zrejme zoznam vsetky rootov v danom frame (funkcii). Pouziva sa na vecsinu gc algoritmov. Co sa tyka shadow stacku tak ten nefunguje pri JIT kompilacii.
Nasiel som toto: http://llvm.org/releases/2.5/docs/GarbageCollection.html#plugin
Je tam asi vsetko co potrebujem, dnes to skusim pridat do kompilatoru. Zatial dik.