現在開発が進められているRuby1.9.2の状況などについて,Ruby1.9のリリースマネージャを務めるYugui(園田裕貴)氏にインタビューさせていただきました。12月23日発売の『WEB+DB PRESS Vol.54』の発売に先立ち,その模様をお届けします。
Rubyの『現在』
- Q: 2009年初めにRuby 1.9.1がリリースされましたが,1.8系統から1.9系統での重要な変更点はどこでしょうか?
A: 最も重要なのは,多言語化対応です(注1)。1.9系統では,同時に複数の言語を扱えるよう,他言語化の手法としてCSI(Code Set Independent)方式を採用しました。システムの内部コードを1つの文字集合で統一する方法ではなく,すべてのエンコーディングを対等に扱っています。この方式では,外部で用いられるコードと内部で用いられるコードが一致するため,不必要なエンコーディングの変換によるオーバーヘッドを減らすことが可能になります。
それと,言うまでもなく,評価器にYARVを採用したことも重要な変更です(注2)。これにより,高速化とネイティブスレッドを実現しました。1.9系統では,1.8系統と比べて体感できるほどにirbの立ち上がりが早いです。この早さと便利な新機能に慣れてしまうと,もう1.8系統には戻れませんね。
- Q: 次期最新バージョンである1.9.2で新たに追加される機能を教えてください。
A:1つ目は,Socket APIをよりオブジェクト指向らしく変更しました。これまではC言語ライブラリの単純なラッパで,Perl風のAPIでした。変更後も以前のものとある程度互換性はあり,移植で困ることはあまりないと思います。
次に,Timeクラスが再実装されました。以前はこちらもCライブラリのラッパで,環境によっては協定世界時(UTC)で1970年から2038年までしか表現できませんでした。これを独自に実装し,太陽系誕生以前の日時も表現できるようになり,2038年問題も解決されました。内部実装は大きく変わっていますがパフォーマンスの劣化はありません(注3)。
また,乱数を扱うためのRandomクラスができました(注4)。マルチスレッドで乱数を扱う際,各スレッドで乱数の正しさを保証できます。
- 注4
- それまでもKernel#randメソッドでメルセンヌツイスターを用いた良い乱数を提供していましたが,生成系のインスタンスが1つだけのため,複数系列の乱数を正しい分布で利用するには工夫が必要でした。
現在,少ないオーバーヘッドでプログラムを動的にトレースすることのできるDTraceをRuby 1.9.2に入れようと作業しています。DTraceはMac OS X標準のRubyやMacRubyには入っているのですが,バグが多くこのまま広まるのが悔しいので開発しています(笑)。

Ruby開発の『最前線』から
- Q: Ruby 1.9系統を開発するうえで,1.9.2はどのような位置づけなのでしょうか?
A:結局のところ,1.9.2はワクワクするような新機能には欠けています。1.9.2の新機能は特定領域で実際に困っている人以外には割とどうでもよいものだというのが私の見解です。これは1.9.1でグランドデザインを決定することに成功したからです。細かな設計ミスの修正や利便性向上のためのリリースが1.9.2で,これによってRuby 1.9は1つの完成型に到達します。その後は再びMVM(注5)のような大きな新機能追加を含むリリースがやってくるでしょう。
1.9.2の開発は,Ruby on Rails 3のチームと協調しながら作業しています。Rails 3はリリース時から1.9.2で動作するでしょう。
また,1.9.2はRubySpec をパスした最初のバージョンとしてリリースする予定です。
- Q: RubySpecとはなんでしょう?
A:まつもとさんのRuby(MRI:Matz' Ruby Implementation)以外にも,JRubyなど多くのRubyの実装が存在しています。RubySpecは,これらが共通的に使えるテストケースを開発するプロジェクトです。Rubiniusの開発チームが発祥で,現在ではJRubyも参加しています。現在は1.8系統がメインですが,1.9.2も対応を進めています。
問題の見つかる個所が,テストケースの問題,テストプログラムの問題,1.9.2の問題,仕様自体の問題と多く,1.9.2をリリースするための最大の課題となっています。しかし,1.9.2にとってRubySpecをパスしたRubyであることはとても大きく,1.8.6と同じくらい安定して動くだろうと考えています。
- Q: 1.9.2以降のRubyはどうなるのでしょうか?
A:1.9.2がリリースされていない段階では,見通しはまだありません。1.9.3にとっておいた新機能が1.9.2で提供できそうです。その先については,YARVの開発者の笹田さんは,1.9.5くらいでMVMを入れたいとおっしゃっていました。Ruby2.0については,全体としての方向性はありますが,何から手をつけていつできるかはまだまだ未定です。
- Q: 1.9.2の開発に携わりたいという人に求めていることはありますか?
A:なんと言ってもバグを修正してくださるとありがたいです。公式のバグトラッキングシステム(注6)にバグ報告が山ほどありますので,メーリングリストに修正パッチを送ってください。
そこまでできないという方でも,お願いできると助かることは沢山あります。様々な環境で動作することを確認したいので,開発メンバーが持っていない環境,例えばPowerPC上のMac OS Xなどでビルドし,テスト結果を報告していただきたいです。環境ごとに動作報告をまとめられる場所を作ることも考えています。また,るりま(注7)に,1.9系統のドキュメント作成をしてくれる方がいると嬉しいです。RubySpecについても,Asakusa.rbというコミュニティで修正のための勉強会などを開いていますので,そちらを参照し,参加してほしいです(注8)。

