JRuby

JRubyの主要開発者であるCharles Nutter氏が'Twas Brilligにおいて、ここしばらくの間続けられたきたJRuby開発についてまとめている。同氏のブログとしては文書量が多く、JRuby開発の苦悩のようすが伝わってきて興味深い。結論からいえば、苦労の末に次にリリースされるJRuby 1.1.4はもっとパフォーマンスが優れたものになり、バグも減り、機能も増えるということだ。ただし、それは簡単な道のりではなかったようだ。

執筆現在でJRubyの最新版は7月19日(米国時間)に公開されたJRuby 1.1.3。実行速度も改善され十分安定してきたことから、1.1系のリリースはメンテナンス対応を除いて1.1.3で最終にしたい意向を持っていたという。というのも、RubyとJavaの両方のコードで複雑化してしまったJava Integration (JI)サブシステムをなんとかしたいという理由から、現状のコードベースは1.1.3で終了し、新しく書き直したJIをベースとして新しいバージョンをリリースしたいという思惑があったからだ。

実験的にJIの入れ替えとなるコードも開発され良好な性能も確認されてはいるものの、現在のJIと比べると圧倒的に評価期間が短いという欠点がある。JIの機能をすべてチェックするテストツールが存在していないため、結局のところ新しく開発したJIを導入することもまた苦痛をともなく結果になってしまう。結局Charles Nutter氏は新しくJIを開発することを断念し、地道に従来のJIのリファクタリングを続けることを選択したという。

リファクタリングの進展状況は全体の25%ほどしか進んでいないとされているが、それでもいくつかの性能でかなり優れた性能改善が実現されている。またリファクタリングが進んでコードがシンプルになった結果として、これまでサポートが見送られてきた新しい機能の実現やバグの修正が簡単に実施できるようになったという副次効果も生まれている。

JIを経由した場合のバイトリストアペンドとRubyコードで動作するバイトリストアペンドの性能比較 - 'Twas Brilligより抜粋

オーバーロードされたInteger.valueOfを使った性能比較 - 'Twas Brilligより抜粋

Ruby配列をJava配列に変換する処理を使った性能比較 - 'Twas Brilligより抜粋

リファクタリングの作業はCharles Nutter氏によって進められている。残りの75%の作業の多くはJIのリファクタリングにあてられるようだ。最終的にJIのコアロジックをJava実装に置き換え、実装の大幅なシンプル化と狙っていくとしている。結局次のリリースは2008年8月中のリリースが予定されているJRuby 1.1.4となる。リファクタリング作業はしばらく継続することになりそうだから、このままいけば1.1.5などのリリースも実施されることになりそうだ。

JRubyをベースとしたWebアプリケーションの開発や運用を進めているものもあり、こうしたJRubyの積極的な開発は注目すべきところだ。さらなるパフォーマンスの向上、互換性の向上、バグの修正など開発すべき内容は多いが、今後も注目されるプロダクトだ。