MacRuby 0.5の最初のベータがリリースされた。現在のところ、Snow Leopard (MacOS X 10.6) マシンでのみ利用可能になっている。
InfoQはMacRubyコアチームにインタビューして、MacRubyの現状と今後について聞いてみた。
InfoQ: MacRubyの新しいVMでは、どのようにLLVMを使っているのですか?
MacRubyは要求に応じて(コードを実際に実行しようとしたとき)すべてをコンパイルします。[LLVM]バイトコードは、最適化パスを通されコンパイルされます。
MacRuby 0.5 betaのリリースノートでも言及されているように、外部関数呼び出しのためのスタブを生成するためにLLVMを使ってる。これまでMacRubyで使われていたlibffiを使うよりも高速になるためだ。
InfoQ: MacRubyのAOT(Ahead-Of-Time)は、Ruby標準ライブラリの一部をコンパイルしていますね。それはなぜですか?
もちろん、起動時間を高速にするためです。基本的に、AOTコンパイラをテストするために事前コンパイルをしています。これらはビルド時にメインのrakeタスクの一部としてコンパイルされます。
InfoQ: ネイティブ拡張のサポート状況はどうですか?
ripper、digest、socket、zlibといったC拡張は少し修正することで動くようになっています。将来のリリースでは、MRI C拡張APIをフル実装する計画です。
InfoQ: バージョン0.5での大きな改善の1つはGILをなくしたことですが、 すべて実装し終えてみて、どうでしたか?
私たちの知る限り、大きなオーバーヘッドにはなっていません。スレッドの開始には以前よりも大きなコストがかかりますが、いったん開始してしまえば、ほとんどのコードを平行に実行することができます。
MacRubyが真のCocoa開発プラットフォームになるためには、GILのないシステムが不可欠でした。デスクトップアプリケーションでは、スレッドや最近出てきたGrand Central Dispatch(GCD)を使うのが一般的だからです。
InfoQ: MacRubyではRubyコードをAOTコンパイルできますが、ガーベジコレクタから抜け出せてしまいますね。Objective-Cのリファレンスカウントによるメモリ管理を使う方法はあるのですか?
それはまだできません [..]。でも、私たちは、コンパイラがautorelease poolを発行するモードと、ランタイムがAutozone GCを使わないモードを検討しています。メーリングリストアーカイブをのぞくと、このトピックの最新の議論が見られます。
GCをエミュレートする方法に関するスレッドで言及されているように、これはMacRubyプログラムをiPhoneのようなAutozone GCをサポートしていないプラットフォームで動かすのに不可欠だ。また、この議論に関する別のメールでは、AutozoneをiPhoneに移植しても解決策にはならない理由を説明している。 なぜなら、iPhoneに搭載されているCocoaはGCについて何も知らないためだ。
最終的なMacRuby 0.5のリリースは、LeopardとSnow Leopard上で、32ビットモードと64ビットモードのどちらでも動くようになる予定だ。
MacRubyに関するInfoQの以前の記事とそのバージョン0.5までの道程を参照