GCあれこれ
GCに関してWebの資料やら、「情報処理学会誌94年11月号」を読み漁っていて大分詳しくなりました。
適当なメモは→Scheme/B.GC調査/02.GC概要 - Mona PJ Wikiに書いてあります。
ひとつまだ分からないことがあって迷っています。
GCを持たないAという言語で、GCを持つインタプリタBを実装するとき、Bのオブジェクトは管理テーブルでタイプや構造を管理して、GCに使います。
つまりAでB用のGCを実装することになります。
では、GCを持つCという言語で、GCを持つインタプリタBを実装するとき、Bのオブジェクトを解放するGCはB用のGCでしょうか。
それとも、C用のGCでしょうか。
個人的にはどちらの可能性もありそうだなと思っているんですが、実際の言語処理系ではどうなんだろう。
C++とBoehm GCでSchemeインタプリタを書いたら、GCの事は考えなくても良いのかなぁとか。
どのみちGCを書くつもりは書くつもりなんですが実装すべきレイヤに迷いがあります。
言語処理系とかGCとか詳しい人いたらぜひ御教授くださいませ。
と書いている途中で、「Gauche:GC」に行きあたり、GaucheがBoehm GCを利用していることを知った。
ほっと一安心。
ちなみに今自分の書いているSchemeインタプリタ(C++)でBoehm GCを使ってみたところ、無理をさせると結構すぐ落ちてしまう印象。
delete してはいけないものを delete をしていそうな感じの落ちかた。
C++での安定実績はどの程度あるのかな。
GCにおいてC++特有の事情とかありそうだしな、保守的GCのポインタかどうか判定とか。