本当は怖いHPC

HPC屋の趣味&実益ブログ

[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のメモリ管理モデルとRubyGCのモデルがイマイチ相性が悪かった。

まぁ双方に原因があると思うんだけどね。特にlibxmlの方は、条件によってAPIの中でメモリが開放されたりされなかったりする変な仕様で、それがSEGVの原因だった(と書いておいてなんだけど、僕の力不足でいまだに解決できていない)。

というわけで、RubiniusのFFI (Foreign Function Interface)を使って書き直したいな、ということ。僕もFFIについてはあまり詳しく知らないけど、このあたりが参考になるかも。というわけで、FFIMRIに移植すればヒーローですね。

ちなみに、Rubiniusって、なぜか「ルビナス」っていう人が(僕の周りの日本人では多いけど)たぶん、本人の発音を聞くと、「ルビニアス」とか「ルビニウス」が近いような気がするな。

【広告】