2009-11-19

MacRuby のこれまで (0.1 〜 0.5 beta 2)

公式ブログのリリース告知をざっとまとめていたんだけど、公式なロードマップが存在していた(→ MacRuby >> Roadmap)。こっちの方がコンパクトなので、それを元に、さらに最新版の 0.5 beta 2 までの特徴を入れ込んでみる。

追記@2010-11-26

0.5 beta 2 の後、0.7 までについてはこちらを参照 → 「MacRuby 0.7 を iMac にインストール

0.1 (released 2008-03-13): GC をふくむランタイムの統合

Roadmap で特色とされているのは以下の 5 項目。

  • 最初の公開リリース
  • Objective-C のランタイムにもとづくオブジェクトモデル
  • Objective-C のメッセージ伝播の仕組みの基礎部分
  • BridgeSupport ファイルを読み込み可能
  • Objective-C の GC との統合

BridgeSupport ファイルはフレームワークやライブラリの API シンボル情報を記載した XML ファイルで、RubyCocoa や PyObjC のようなスクリプト言語と Objective-C ランタイムとのブリッジ機能で使われる。以上、Snow Leopard の man ページより。

Laurent が MacRuby-devl ML に投げた告知メールによれば、

MacRuby is a version of Ruby that runs on top of Objective-C. More precisely, MacRuby is currently a port of the Ruby 1.9 implementation for the Objective-C runtime and garbage collector.

肝心なことは Objective-C のオブジェクトがそのまま Ruby のオブジェクトになっているよ、というとだろう。MRI 1.9 を Objective-C のランタイムと GC に移植した、と言っている。

0.2 (released 2008-06-06): 基本クラスの再構築

0.1 から約 3 ヶ月、0.2 がリリースされた。 Roadmap で特色とされているのは以下の 4 項目。

  • 組込みクラスのうち、String、Array、そして Hash を CoreFoundation を使って書き直した。
  • CoreFoundation クラスを使い、(String、Array、および Hashのすべての) Ruby インターフェイスを再実装した。
  • Ruby の基本オブジェクトと CoreFoundation 間の「トールフリー」なブリッジを実現した。
  • そこそこ安定。これまでに見つかった GC をクラッシュさせるバグとメモリリークをすべて除去した。

この頃にはブログを始めとするプロジェクト公式サイトも整備されていて、リリース告知も ML の他ブログでも掲載されている。(→ MacRuby >> The MacRuby Blog >> MacRuby 0.2)

上記ブログでの告知によれば、とくにパフォーマンスチューニングは施していないけれど、基本クラスを CoreFoundation ベースにしたことで、文字列、配列、そしてハッシュの操作が高速化された、と書いてある。

0.3 (released 2008-09-08): HotCocoa デビュー、メソッド配信機構の統合

0.2 からまた 3 ヶ月。0.3 がリリースされた。 Roadmap で特色とされているのは以下の 5 項目。

  • 純粋な Ruby オブジェクトのメソッド配信にも Objective-C の仕組みを使うように変更した。
  • RugyGems が(完全ではないが)動くようになった。
  • インターフェースビルダーとの連携をサポートした。
  • HotCocoa レイヤーを追加した。
  • パフォーマンスも良くなってきた。

ブログ上の告知(→ MacRuby >> The MacRuby Blog >> MacRuby 0.3)でも、大きく取り上げられているように、このリリースでの目玉は HotCocoa だ。このレイヤーが導入されたことで、Cocoa アプリを Ruby らしい書き方で作れるようになった。また、内部的には、メソッド(メッセージ)配送の仕組みを Objective-C 方式に統一した。パフォーマンス面の向上は、これによって持たらされたもの。互換性に関して、RubyGems は動くものの、Rails はまだ、となっている。

0.4 (released 2009-03-09): アプリ開発可能な安定板

0.3 から半年。これまでのリリースにくらべて、少し期間が空いて 0.4 がリリースされた。 Roadmap で特色とされているのは以下の 6 項目。

  • スレッド化された GC をデフォルトで有効にした。
  • 64 bit モードをサポートした (x86_64)。
  • Dtrace による探針をサポートした。
  • MacRuby Objective-C API の導入。Objective-C 側からランタイムを制御するためのもの。
  • アプリに埋め込み可能な MacRuby フレームワークを提供した。
  • 引数の参照渡しをサポートした。

ブログ上の告知(→ MacRuby >> The MacRuby Blog >> MacRuby 0.4)では、上記に加えて、Xcode のプロジェクトテンプレートが追加されたこと("MacRuby Core Data Application&guot;)、HotCocoa が強化されたこと(HotCocoa::Graphics の追加、等)が書かれている。また、標準ライブラリを MRI 1.9.1 のものに更新したことも付け加えられている。

また、同告知の最後に、0.4 はいくつか問題が残っている(C による拡張機能、RubyGems、Ruby 側の IO)ものの、Cocoa アプリの開発に対してかなり安定している、と書かれている。そして、0.5 ではパフォーマンス向上に焦点を当てる、とも。

0.5 beta 1 (released @ 2009-10-07): LLVM 採用

0.4 から 7 ヶ月。0.5 はリリース前に beta 版が公開されるようになった。0.5 では、かなり野心的なゴールを目指しているからだと言う。(→ MacRuby >> The MacRuby Blog >> MacRuby 0.5 beta 1)

特色は以下の 4 項目。

  • コンパイルの実現 (ランタイムを YARV -> LLVM と変更したことで、JIT のみならず AOT コンパイルも可能になった)
  • 並列性の強化 (native POSIX thread、GCD サポート)
  • 最適化 (大規模 MacRuby アプリをプロフィールした結果にもとづき、実行時におけるパフォーマンス面での最適化を行った)
  • Cocoa アプリの高速化 (C および Objective-C 側の呼び出しを LLVM を活かすように再実装)
  • 互換性 (RubySpec を用いて互換性のチェックを行っている; 言語仕様 91%、コア仕様 80%、ライブラリ仕様 72%)

0.5 beta 2 (released @ 2009-11-17):

beta 1 から約 1 ヶ月。0.5 beta 2 がリリースされた。(→ MacRuby >> The MacRuby Blog >> MacRuby 0.5 beta 2)

特色は以下の 3 項目。

  • 互換性を向上させた。
  • AOT コンパイラを修正および強化した。
  • DTrace の探針サポートを新しい VM にも組み込んだ。

ちなみに 0.5 beta 2 には HotCocoa のサポートに問題がある。HotCocoa のサンプルとして挙げられている短いコードが動かないのだ。この問題はすでに ticket が上げられている。

「次の一歩」を受け継ぐもの

Objective-C、そして Cocoa は NEXTSTEP の後継だ。NEXTSTEP はほとんど触れたことがないし(大学の計算機センターにずらっと並んでいるのは見たことがある)、ましてやその上のプログラミングを経験したことはない。けれど、フレームワークとしての Cocoa や、開発ツールとしての Xcode/Interface Builder を見るにつけ、「これって開発者(プログラマ)のためのコンピューティング環境だよな」と感じる。Cocoa のアプリが使いにくいと言いたいんじゃない。ただ、どういう思想でこの環境が作られているか、と考えたときに、真っ先に浮かぶのは開発者(プログラマ)の姿だ、と言いたい。NEXTSTEP という名前に込められたのは、ユーザにとっての進化よりもむしろ、開発者にとっての「次の一歩」だったのではないか。

今の Mac は、プログラマがプログラミングを楽しむための道具として充実している。ベースは unix だから、オープンソースソフトウェア界隈の成果も存分に享受できる。それでいてドミナントなプラットフォームに劣らないリッチなあれこれ(音楽だとか映像だとか)も自在に使える。加えて、(これは個人的な主観だけど) 画面の描画の美しさは他の追随を許さない。Objective-C / Cocoa は Mac OS X の言わばネイティブなプログラミング環境だ。そのプログラマは、優雅で、多彩で、力強いパワーのすべてを使うことができる。そして今、Ruby というプログラミング言語は、MacRuby という variant によって、これを丸ごと飲み込もうとしている。MacRuby は、Matz の言う「たのしいプログラミングを可能にする言語」の思想をそのままに、プログラマにとって快適な開発環境をそっくり丸ごと継承できる。

どう? もう、Mac で、MacRuby を使ってプログラミングするしかないでしょ。

ただ、iPhone があるんだよなあ。あれのアプリを MacRuby で作れるようになったら楽しそうだ。まあ、あっちには GC も載っていないから、当分無理か。iPhone OS 4.0 あたりで、どうにかしてください。 > Apple

関連リンク

関連記事

0 件のコメント:

コメントを投稿