ガベージコレクションのアルゴリズムと実装 第11章「Rubinius の GC」その3

今日も第11章「Rubinius の GC」の「正確なGCへの道」からです。

  • ルートのうち「C拡張ライブラリ用ハンドラ」が保守的GC の CRuby 向けの拡張ライブラリを Precise GC の Rubinius で使うための工夫
    • Rubinius では CRuby の拡張ライブラリがそのまま動く!!
    • C拡張ライブラリ側の関数が呼ばれるたびに NativeMethodFrame が積まれて、そこからC拡張ライブラリ側に渡されたRubyのオブジェクトのハンドラが参照される
    • dRuby でリモートのオブジェクトのGCを回避するためにする Hack にちょっと似てるかも
    • ハンドラ自体は参照カウント方式で管理されてる
  • コラムより。さらに Ruby のオブジェクトの構造が CRuby と異なっている点は C-API からオブジェクトを渡す際に CRuby の struct R??? の構造体にコピーして渡しているとか。凄い

Rubinius の互換性のための工夫に驚きました。FFI の項は明日からです。