RubyKaigi2007レポート(後編)

Ruby1.9は継続と“Fiber”をサポート

2007/06/12

 RubyKaigi2007レポート(前編)に続いて、RubyKaigi2007で明らかになった技術的な内容についてもお伝えしよう。

 次世代のRuby処理系「Ruby1.9」開発の中心人物である笹田耕一氏は、「Ruby1.9実装の現状と今後」と題して講演し、「Ruby1.9は、今年(2007年)12月に出る」とスケジュールを改めて確認した。過去のRuby処理系のリリースは予定通りに出ないことが通例だったが、この「2007年12月」というスケジュールは、2006年8月に開催された軽量言語に関するイベント「Lightweight Language Ring」の場で公表されて以来、何回か強調されている。開発メンバーたちが自分自身に言い聞かせるための念押しなのかもしれない。「ちょっと品質が悪くても、1.9.1を2007年12月25日にリリースする」(笹田氏)。バグが取れた処理系を使いたい開発者には、現行の安定版であるRuby1.8.6の利用を勧めている。

 Ruby1.9の主な変更点は、新たな仮想マシン(YARV)の導入、多言語対応(M17N:Multilingualization)、言語仕様の一部変更、である。現行のRuby1.8系とは完全互換ではないものの、比較的互換性があるという。Ruby on Railsも、Ruby1.9の上で「数行を手直しする程度で動作した」(笹田氏)としている。

 現行のRubyインタプリタは構文木をそのまま実行する形式のインタプリタだが、Ruby1.9では、中間言語をスタック・マシンで実行する仮想マシン・アーキテクチャを導入することにより処理を高速化する。実行前にRubyコードをC言語コードに変換するAOT(Ahead-of-Time)コンパイラも搭載し、高速化のための選択肢を増やした。

 Ruby処理系の代替実装として、Java仮想マシン(JVM)上の「JRuby」や、.NETのDLR(Dynamic Language Runtime)上の「IronRuby」、Smalltalk風のバイトコード・インタプリタに基づく「Rubinius」などが話題となっている。このような状況を意識してか、Ruby1.9は「たぶん最も高速なRuby処理系」(笹田氏)と強調した。ただし、ベンチマーク結果の数字などは今回は示していない。

新たにネイティブ・スレッドに対応

 Ruby1.9の仮想マシンでは、新たにネイティブ・スレッドに対応する。ただし、スレッドの並列実行はしない方針である。理由は、現行の拡張ライブラリのかなりの部分が動作しなくなるためである。並列処理による高速化は、その先の世代に持ち越す形となる。

 また、現行のRuby1.8系で提供している「継続(continuation)」の機能(Ruby言語のcallcc/callメソッド)をRuby1.9にも採用するとの発表があった。継続を実現できるプログラミング言語はいくつかあるが、Scheme以外の言語では利用者は非常に少ないと言われている。ある時期、Ruby1.9では継続はサポートしないとの方針が示された事があったが、結局は取り入れることになった。

rubykaigi201.jpg Ruby1.9では「Fiber」と呼ぶ新たな軽量スレッド機能が加わった。Fiberは自動的には切り替わらず、明示的に処理の移動を記述するスレッドで、ネイティブ・スレッドよりも軽量。スライドのプログラム例では、f1というFiberの中でf2.yieldと書くことで、明示的にf2というFiberに処理を移動している。

 Ruby1.9では、新機能として、一種の軽量スレッドである「Fiber」を取り入れる。Fiberは、自動的に処理が切り替わらず、明示的に処理の切り替えを記述するスレッドである。マイクロ・スレッドやコルーチンと呼ばれる機能と同じものである。OSが提供するネイティブ・スレッドよりもはるかに軽量である。前述の継続と似た使い方ができるが、継続よりもコンテキスト切り替えのコストが低く、記述がよりシンプルになるという特徴がある。

その先の世代では並列処理も意識

 最近のプログラミング言語処理系の動向として話題となっているのが並列処理である。背景として、単一CPUの性能向上が限界に来ており、マルチコア・プロセッサの採用が進んでいることがある。ただ、前述したようにRuby1.9では並列性への対応は後回しとなっている。Rubyが、普及した言語と先進的な言語という二面性を保ち続けるためには、いつかは並列処理は避けては通れないテーマとなるだろう。

 RubyKaigi2007でのまつもとゆきひろ氏の基調講演では、マルチコア対応の重要性への言及や、並列処理機能に適した記述能力を持つ言語であるErlangやScala、Fortressなどへの言及により、Ruby1.9の先のバージョンのRubyではなんらかの並列処理機能を取り入れるとのニュアンスを示した。ただし、具体的にどのような機能を取り入れるかについては明言しなかった。

 また笹田耕一氏は、研究テーマとしてスーパーコンピュータ向けのRuby技術「HPR」(High Performance Ruby)に取り組んでいるが、これもRuby言語に並列計算と分散データ処理の機能を追加するものである。

安定版Rubyは2系列を同時にメンテナンス

 Ruby1.9が登場してもすぐには安定しないと予想されることから、実用的なRuby処理系としてはしばらくの間はRuby1.8系の「安定版Ruby」が使われ続けることになる。安定版Rubyの保守を担当する中心メンバーである卜部昌平氏からは、Ruby1.8系の開発状況についての発表があった。

 現在、Ruby1.8.5とRuby1.8.6の2系統についてパッチをリリースし続けている。今後も、同時に2系統のリリースを続けていく。方針は、脆弱性のように緊急性がある修正は随時、それ以外の修正は3カ月間隔でパッチをリリースしていく、というものである。世界中のRubyユーザーを支えているのは、この安定版であることを考えると、定期的な保守リリースが安定的に供給されることは非常に重要であるといえる。

JRuby1.0をリリース、繰り返し実行で高速化

 JRubyの開発者であるチャールズ・ナッター(Charles Nutter)氏とトーマス・エネボー(Thomas Enebo)氏は、Java仮想マシン(JVM)上のRuby処理系であるJRubyについて発表した。発表者の2人は、もともと本業の合間にオープンソース・プロジェクトとしてJRubyの開発を進めていたが、2006年9月に米サン・マイクロシステムズが2人を雇用したことで、現在はフルタイムでJRuby開発を進めている。JRubyのリリース1.0が、このRubyKaigi2007に合わせて公開された。

rubykaigi202.jpg JRubyのベンチマーク・テスト。表示している数字は、左からユーザ時間、システム時間、合計時間、実測時間。JRuby1.0のベンチマーク結果は、1回目の実行では2.07 秒。Cで記述したRuby1.8.5では1.68秒なので、それより遅い。2回目の実行では1.234秒に高速化し、Ruby1.8.5を逆転している

 JRuby1.0はRuby1.8.5互換の処理系で、RubyコードからJavaバイトコードへの変換機構を備える。この変換機構と、Java仮想マシン(HotSpot VM)が備える実行時コンパイル機能の組み合わせにより、同じプログラム・コードを繰り返し実行すると高速になっていく。

 JRubyの大きなメリットは、Javaのライブラリ群を活用できることである。例えば、Ruby on Railsで利用できるデータベースの選択肢が大幅に増える。またエンタープライズ向けJava技術であるJava EEのAPI群の中から、必要なものを選択して使うことができる。例えば管理フレームワーク「JMX」などである。また、Ruby on Railsアプリケーションについて、データベース接続プーリング、WAR形式でのデプロイなどの機能を利用できる。

 このほか、RubyKaigi2007では多数のセッションがあり、Rubyの応用範囲の広がりを見せた。その中には、次期MacOS Xである「Leopard」がMacOS XのGUIフレームワークをRubyから呼び出す「RubyCocoa」を標準搭載するというニュースも含まれていた。

 現在のRuby人気は、まつもと氏が指摘するようにRuby on Railsの影響による部分が大きい。しかし、Rubyの可能性はRailsだけではなく、もっと幅広いものである──そのような自負心と、「ブームに踊らされてRubyコミュニティの良さを見失ってはいけない」、というメッセージを感じたRubyKaigi2007だった。

(星暁雄=コモンズ・メディア)

情報をお寄せください:

Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

注目のテーマ

ソリューションFLASH

「ITmedia マーケティング」新着記事

無料で使えるWebフォーム作成管理システム nocoが「ヘルプドッグ フォーム」を提供開始
直感的なUIと豊富なテンプレートでフォーム作成にかかる時間とコストを大幅に削減。フォ...

「パーソナライゼーション」&「A/Bテスト」ツール売れ筋TOP5(2024年5月)
今週は、パーソナライゼーション製品と「A/Bテスト」ツールの国内売れ筋各TOP5を紹介し...

ビービット、FPTジャパンホールディングスと共同で生成AI活用PoCを支援する高速・低価格パッケージを提供開始
生成AI活用アイデアの実現性や有用性を迅速に検証し、サービスの方向性・実装を判断する...