[ruby][rubinius] RubiniusのFFIをMRIに移植したらヒーローか?
昨日のlibxml-rubyの開発メーリングリストで、メイン開発者のDan Janowskiが、こんなメールを流していた。
libxml-rubyって、Rubiniusで動くの?って質問に対する返答。
Thu Jan 31 11:27:54 EST 2008 This entices me. The MRI internals (esp. the GC) are the biggest obstacle to making this library work and I am beginning to really hate them. I've even had this delusion that making this library work with Subtend may enable effective repair of outstanding faults more easily than trying to do it under MRI. Then I have this shimmering vision of dumping the whole code base and just writing an FFI interface. Dan
確かに、Rubyの拡張ライブラリは書きやすいんだけど、メモリ周りでハマると地獄を見る。僕も、以前にlibxml-rubyがSEGVするバグを追いかけたことがあって、確かに死にそうになった。結果的にはメモリの2重開放だったんだけど、libxmlのメモリ管理モデルとRubyのGCのモデルがイマイチ相性が悪かった。
まぁ双方に原因があると思うんだけどね。特にlibxmlの方は、条件によってAPIの中でメモリが開放されたりされなかったりする変な仕様で、それがSEGVの原因だった(と書いておいてなんだけど、僕の力不足でいまだに解決できていない)。
というわけで、RubiniusのFFI (Foreign Function Interface)を使って書き直したいな、ということ。僕もFFIについてはあまり詳しく知らないけど、このあたりが参考になるかも。というわけで、FFIをMRIに移植すればヒーローですね。
ちなみに、Rubiniusって、なぜか「ルビナス」っていう人が(僕の周りの日本人では多いけど)たぶん、本人の発音を聞くと、「ルビニアス」とか「ルビニウス」が近いような気がするな。