MacRuby 0.7 (実際は 0.7.1) が公開された。多数のバグがフィックスされ,Ruby との互換性が向上 している。
MacRuby 0.7 は,Ruby バージョン 1.9.2 を対象とした MacRuby の最初のリリースです。たくさんの新機能が再実装,あるいはバックポートされています。
本リリースは RubySpecs 全体を平均 90% パスしています。前回リリースではおよそ 82% でした。
MacRuby 0.7.1 には,Cocoa,Objective-C,あるいは C 言語プログラムへのスクリプトサポートを補完する BridgeSupport というツール が添付されている。以前のバージョンには,この部分にいくつか欠落があった。C とその派生言語用に Apple が追加したブロック機能などがそうだ。今回のリリースでは,C 言語のコードブロックを必要とする API に Ruby Proc を渡すこと,あるいはその逆を行うことが可能になった。
これらの機能は,メタデータの欠如を理由にサポートされてこなかった。BridgeSupport はそれを解決する。LLVM の Clang パーザ上に構築された BridgeSupport がライブラリのソースを調べて,メタデータを生成する。MacRuby はそれを参照することによって,ブロックやシンボルなど必要なライブラリ情報を取得できるのだ。BridgeSupport のソースを見れば,Clang がメタデータの決定と生成に使用されている様子を確認できる。
MacRuby は Ruby スレッドの並列動作をサポートする (つまり GIL(global interpreter lock) を使用しない)。このことは,Mac OS X Snow Leopard のシステムレベルのスレッドプールシステムである Grand Central Dispatch (GCD) で使用する場合,特に有効だ。
GCD に統合された MacRuby を実証するものとして,MacRuby で新たに記述された Web サーバである ControlTower がある。Rack ライブラリ上に構築されたこのサーバは,受信したリクエストを GCD キューに委譲することによって処理を行う。この方法で要求を連続的 (シリアル),並列的 (パラレル) いずれでも処理することができるのだ。ControlTower のリリースノートにはアーキテクチャ概要に加えて,Thin サーバ (同じく Ruby で記述された Web サーバ) とのパフォーマンス比較値がいくつか紹介されている。
ControlTower は Rack をサポートしているが,Rails ユーザはまだ期待しないほうがいい - MacRuby 0.7.1 では Rails 3 はサポートされない。Rails のサポートは,次の MacRuby リリースに計画されている。
MacRuby 0.7 で利用可能になった Mac OS X 機能にはもうひとつ,OS プロセスの権限を制限するサンドボックス (Sandbox) がある。サンドボックスによって,ネットワークやファイルシステムへのアクセスなどを拒否することができる。これは MacRuby 特有のものではない - Playpen (ベビーサークル) 拡張を使えば,他の Ruby 実装でも Mac OS X サンドボックス機能を利用することができる。
最後に,MacRuby のリリースノートで提供されている,すべての Ruby コードの実行速度向上に必要な作業に関連する貴重かつ興味深い情報を紹介しよう。
コンパイル時のヒューリスティックな処理を単純化するため,基本的なインタプリタが実装されていて,現在ではこれがコールドパスの評価に使用されます。Ruby ライブラリでは一般的なパターンである単純な #eval 文によるコード生成によって,大幅な高速化を実現できるのはその一例です。
MacRuby を始めようという開発者は,まず "MacRuby: The Definitive Guide" を読むべきだろう。Matt Aimonetti 氏がオライリーで執筆中のものがオンラインで無償公開されている。