J'ai appelé ma classe 'Object' car c'est une classe qui doit servir de base à toutes les autres classes voulant faire partie du GC. ce n'est peut être pas un nom idéal, enfin.
J'ai déjà deux implémentation de mon langage, une en C1 utilisant le garbage collector Bohem, l'autre2 en D3 (très peu testée et ne doit pas bien marcher).
Je me doute bien que c'est un sujet un peu complexe mais après avoir créé quelque chose en C qui marche, je n'ai pas l'impression que ce soit si difficile que ça. Et le garbage collector à l'air aussi d'être très simple.
La complexité du sujet est la raison pour laquelle je viens demander des avis car je n'ai pas une grande formation pour l'instant, juste 1 an d'IUT derrière moi.
Un exemple de programme : http://bzr.mildred632.free.fr/Projects/moon-c-gc/test1.moon
Trace attendue : display : ("Test squared brackets " (test abc) " done")
display : (test-env: true)
display : (test-env: false)
display : (function: #function<anonymous moon function> "test-"string")
display : (call: (f: de upvalue-test-env: false))
display : (sub-environment: test-env = error)
display : (sub-environment: f = #function<anonymous moon function>)
display : (call: (f: test-lexical-scoping upvalue-test-env: false))
display : (f2: test-f2)
display : (abc (de #function . hi))
test1.moon:23:5 Runtime error (not found error) : The symbol cannot be evaluated : variable not found
Stack traceback :
test1.moon:23:5 : symbol unknown-symbol
test1.moon:2:5 : pair (pair (symbol display ... ...
/home/mildred/Projects/moon/moon-cgc/stdmoon/macros.c:209:0 : macro begin
test1.moon:1:1 : pair (symbol begin ...
/home/mildred/Projects/moon/moon-cgc/moonexe/main.c:108:0 : buffer
Il n'utilise pas spécialement le GC, il faudrait que j'en fasse un autre. Et pour en faire un autre, il faut que crée d'autres fonctions/macros.
La fonction C prend en paramètre la pile d'appels/d'évaluation, une référence sur l'objet fonction/macro, une référence sur son paramètre et un pointeur sur un objet résultat à remplir.
La fonction retourne un booléen, c'est pour avoir une optimisation de la récursion terminale. Si elle retourne vrai, alors le paramètre résultat est évalué après la fin de l'appel.
*popn est un peu plus compliqué et n'intervient qu'en cas ou la fonction retourne vrai. C'est le nombre d'éléments à faire sauter de la pile après l'évaluation du paramètre résultat. Valeur par défaut = 0.
[^] # Re: ...
Posté par Mildred (site web personnel) . En réponse au message garbage colector C++ ?. Évalué à 3.
J'ai déjà deux implémentation de mon langage, une en C1 utilisant le garbage collector Bohem, l'autre2 en D3 (très peu testée et ne doit pas bien marcher).
Je me doute bien que c'est un sujet un peu complexe mais après avoir créé quelque chose en C qui marche, je n'ai pas l'impression que ce soit si difficile que ça. Et le garbage collector à l'air aussi d'être très simple.
La complexité du sujet est la raison pour laquelle je viens demander des avis car je n'ai pas une grande formation pour l'instant, juste 1 an d'IUT derrière moi.
Un exemple de programme : http://bzr.mildred632.free.fr/Projects/moon-c-gc/test1.moon
Trace attendue :
display : ("Test squared brackets " (test abc) " done")
display : (test-env: true)
display : (test-env: false)
display : (function: #function<anonymous moon function> "test-"string")
display : (call: (f: de upvalue-test-env: false))
display : (sub-environment: test-env = error)
display : (sub-environment: f = #function<anonymous moon function>)
display : (call: (f: test-lexical-scoping upvalue-test-env: false))
display : (f2: test-f2)
display : (abc (de #function . hi))
test1.moon:23:5 Runtime error (not found error) : The symbol cannot be evaluated : variable not found
Stack traceback :
test1.moon:23:5 : symbol unknown-symbol
test1.moon:2:5 : pair (pair (symbol display ... ...
/home/mildred/Projects/moon/moon-cgc/stdmoon/macros.c:209:0 : macro begin
test1.moon:1:1 : pair (symbol begin ...
/home/mildred/Projects/moon/moon-cgc/moonexe/main.c:108:0 : buffer
Il n'utilise pas spécialement le GC, il faudrait que j'en fasse un autre. Et pour en faire un autre, il faut que crée d'autres fonctions/macros.
Voici comment sont implémentées les fonctions ... et donc comment on fait un binding : http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc/(...)
La fonction C prend en paramètre la pile d'appels/d'évaluation, une référence sur l'objet fonction/macro, une référence sur son paramètre et un pointeur sur un objet résultat à remplir.
La fonction retourne un booléen, c'est pour avoir une optimisation de la récursion terminale. Si elle retourne vrai, alors le paramètre résultat est évalué après la fin de l'appel.
*popn est un peu plus compliqué et n'intervient qu'en cas ou la fonction retourne vrai. C'est le nombre d'éléments à faire sauter de la pile après l'évaluation du paramètre résultat. Valeur par défaut = 0.
1 http://bzr.mildred632.free.fr/viewsource/Projects/moon-c-gc
2 http://bzr.mildred632.free.fr/viewsource/Projects/moon-d
3 http://www.digitalmars.com/d/