写真1●講演する笹田耕一氏<BR>学生時代からYARVの研究開発を開始し,現在は東京大学大学院情報理工学研究科特任助手。Ruby開発のコア・メンバーの一人である
写真1●講演する笹田耕一氏<BR>学生時代からYARVの研究開発を開始し,現在は東京大学大学院情報理工学研究科特任助手。Ruby開発のコア・メンバーの一人である
[画像のクリックで拡大表示]
写真2●YARVの概念図&lt;BR&gt;Rubyプログラムを中間コードにコンパイルし,仮想マシン(VM)上で実行する。動的言語に対応しつつ高速化を図った点が特色である
写真2●YARVの概念図<BR>Rubyプログラムを中間コードにコンパイルし,仮想マシン(VM)上で実行する。動的言語に対応しつつ高速化を図った点が特色である
[画像のクリックで拡大表示]
写真3●Ruby1.9でが標準で適用する高速化技法&lt;BR&gt;YARV上で各種の高速化技法を実装,検討した結果,Ruby1.9では一部の機能をデフォルトとして採用した
写真3●Ruby1.9でが標準で適用する高速化技法<BR>YARV上で各種の高速化技法を実装,検討した結果,Ruby1.9では一部の機能をデフォルトとして採用した
[画像のクリックで拡大表示]
写真4●ベンチマークでの性能向上の様子(1)&lt;BR&gt;「loop_generator」ではRuby1.8に比べ50倍近い性能向上を示す。ただし,CPU種別により性能向上の傾向が異なる場合もあるので注意が必要である
写真4●ベンチマークでの性能向上の様子(1)<BR>「loop_generator」ではRuby1.8に比べ50倍近い性能向上を示す。ただし,CPU種別により性能向上の傾向が異なる場合もあるので注意が必要である
[画像のクリックで拡大表示]
写真5●ベンチマークでの性能向上の様子(2)&lt;BR&gt;各種マイクロ・ベンチマーク・テストの結果は,2倍から8倍程度の性能向上を示す。左から2番目はフィボナッチ数列を求めるベンチマークで8倍程度の性能向上を示している
写真5●ベンチマークでの性能向上の様子(2)<BR>各種マイクロ・ベンチマーク・テストの結果は,2倍から8倍程度の性能向上を示す。左から2番目はフィボナッチ数列を求めるベンチマークで8倍程度の性能向上を示している
[画像のクリックで拡大表示]
写真6●ベンチマークでの性能向上の様子(3)&lt;BR&gt;基本的な命令の性能を測定した結果。100倍以上と極端な性能向上を示す場合もある
写真6●ベンチマークでの性能向上の様子(3)<BR>基本的な命令の性能を測定した結果。100倍以上と極端な性能向上を示す場合もある
[画像のクリックで拡大表示]
写真7●ベンチマークでの性能向上の様子(4)&lt;BR&gt;写真6のグラフから極端な結果を除外して,性能向上の様子を見やすくした。多くの場合,Ruby1.8に比べ5倍以上の性能向上を示している
写真7●ベンチマークでの性能向上の様子(4)<BR>写真6のグラフから極端な結果を除外して,性能向上の様子を見やすくした。多くの場合,Ruby1.8に比べ5倍以上の性能向上を示している
[画像のクリックで拡大表示]
写真8●まつもとゆきひろ氏と笹田耕一氏が報告会の前夜に行っていた共同開発の様子
写真8●まつもとゆきひろ氏と笹田耕一氏が報告会の前夜に行っていた共同開発の様子
[画像のクリックで拡大表示]

 日本生まれのプログラミング言語として注目が高まっているRubyの次世代版「Ruby1.9.1」が,この2007年12月にも登場する。現行のRuby1.8系列と次世代版Ruby1.9系列の大きな違いは,新たな仮想マシンYARV(ヤルフ)を搭載することによる性能向上である。現行のRuby1.8に比べて,ベンチマーク・テストでは5倍以上といった大幅な性能向上を示す。

 Ruby1.9の最新状況は,2007年9月7日に東京工業大学で開催した「IPA未踏ソフトウエア創造事業 2006年下期千葉PM採択プロジェクト最終成果成果報告会」において,笹田耕一氏(東京大学大学院情報理工学研究科特任助手,写真1)による「これからのRuby──Ruby1.9」と題した講演の中で明らかとなった。この講演は,未踏プロジェクト「Ruby用仮想マシンYARVの完成度向上」の成果報告として行われた。

 Ruby1.9ではYARV搭載のほか,バグ修正,言語仕様の一部変更,M17N(多言語対応),並行処理記述のための「Fiber」などの機能追加が予定されている。

2007年末のスケジュールに変更なし

 笹田氏はまず,「Ruby1.9.1は,“十中八九”2007年末には登場する」とスケジュールを確認した。従来のRubyのリリース・スケジュールは過去に何回も延長を繰り返してきた“前科”があるが,Ruby1.9のリリース時期の表明は発表から1年にわたり一貫している。再度スケジュールを開発者達の決意を示したものといえる。

 YARVは,もともと笹田氏が個人として開発を始めたRuby用仮想マシンであるが,まつもとゆきひろ氏らが開発する“本流”Rubyの次期版であるRuby1.9では正式な処理系として搭載することが決まっている。つまりRuby1.9では,処理系のアーキテクチャを一新することになる。

 従来のRuby処理系は構文木インタプリタによる実装だったが,YARVではRubyプログラムを中間コード(YARVバイトコード)にコンパイルし,最適化を施したうえでスタック・マシン型の仮想マシンにより実行する(写真2)。Java仮想マシンや.NETのCLRと同様のアーキテクチャであるが,中間コードが動的言語であるRubyのための記述能力を備えている点が大きく違う。原理的には,YARVの上にRuby以外の動的言語を実装することも可能である。

各種の高速化技法を検討し,一部をRuby1.9に取り入れ

 笹田氏は,過去数年にわたりYARV仮想マシン・アーキテクチャの上で各種の高速化技法の実装と評価を進めてきた。

 Ruby1.9では,笹田氏が今までにYARV上で実装,評価してきた高速化手法の中で,有効と認めたものだけをデフォルトで適用する。写真3のスライドで,「○」印が付いているものがRuby1.9でデフォルトで適用する手法,「×」が付いているものが不採用の手法である。

 採用した高速化手法は,オブジェクト指向言語や動的言語に特有の手法が目立つ。特定の単純なメソッド呼び出しを高速化する「特化命令」,命令列の中に一度呼び出したメソッド検索結果をキャッシュする「インライン・メソッド・キャッシュ」,「リフレクションの最適化」,などである。

 一方,開発の過程で実装したものの,評価した結果を見てデフォルトでは不採用とした技法もある。「『末尾呼び出しの最適化』は,まだバグが残っていることもあり標準搭載にはしなかった。『並列実行』は実装して評価し,その結果に基づく学術論文も執筆したが,まだ実用に耐える段階ではないとしてRuby1.9では採用を見送った。並列処理は,組織的な開発であればともかく,1人で行う研究開発としては難しい」(笹田氏)。Ruby1.9が登場しても,まだまだ最適化の余地が残されている訳である。

 このほか,YARV特有の機能追加として,「YARVアセンブラ」や,YARVバイトコードのシリアライザ,デシリアライザなどがある。

各種ベンチマークでの性能向上を確認

 Ruby言語は,他のプログラミング言語に比べると処理性能が遅いと言われてきた。Ruby1.9での大きな課題は,各種のマイクロ・ベンチマークで高速化を図ることにある。マイクロ・ベンチマークでの性能向上が直ちに実用的なアプリケーションの高速化を意味する訳ではないが,「Rubyは遅い」との評価を覆すことでより一層の普及を狙う作戦である。

 各種ベンチマーク結果のグラフを示した(写真4~7)。ベンチマーク結果の見方は注意が必要である。例えば,CPUの種類により結果が逆転する場合もある。どれだけ高速になったかを一つの数字で示すことは難しい。

 典型的な例としては,フィボナッチ数列を求めるベンチマークでは8倍程度の高速化を達成している。マイクロ・ベンチマーク全般では2~8倍程度,基本的な命令のテストでは5倍以上の高速化を達成していることが読み取れる。

Rubyは遠隔地の開発者どうしがリアルタイムに連携して開発

 Ruby1.9の開発は,Ruby言語の開発者であるまつもとゆきひろ氏,YARV開発者の笹田耕一氏らコア開発者達が連携を取り合って進めている。島根県松江市在住のまつもと氏と,東京に勤務地がある笹田氏とでは距離があるが,1年に数回の開発合宿を開催したり,SkypeやIRCのチャットも活用するなどして開発メンバーの意思疎通を図っている。「Ruby主要開発者の間では緊密な連携を取っている」(笹田氏)ことを,Skypeチャットの履歴を示しながら説明した(写真8)。