JRubyそしてJython

2007年6月9日 (土)

Java実行環境のJavaVM(Java Virtual Machine)は、コンパイルされたJava中間コードを実行する環境である。ということは、ソースコードがJavaである必要はない。他言語のソースプログラムをJava中間コードにコンパイルできれば、それはJavaVMで実行できる。

そのようなソフトのひとつにJRubyがある。これは、Ruby言語インタープリタのJavaによる実装である。私はRubyは言語を少々勉強しただけなので、JRubyの存在は最近始めて知った。

JRubyによれば、6月2日にJRuby 1.0.0RC3がリリースされた。バージョン1.0の直前版の位置付けのようだ。

JRubyは、マイコミジャーナルの記事Java + RubyのJRuby - EJBからSwingまでRubyからJavaを使い倒すくに詳しく述べられている。その特徴は、次のとおり述べられている。

1.Rubyの言語仕様に準拠している:
Ruby1.8.5を元に、一部未実装や問題がある機能もあるものの、言語仕様を非常に互換性高く実装している。またRubyの標準ライブラリやgems (Rubyのライブラリなどをインストールするためのツール)についてもほとんどが含まれており、Rubyのプログラムの多くがJRuby上で正常に動作する

2.JVM上で動作する:
JRuby自体は100%Javaで実装された処理系である。したがって、実行するためにはJavaVMがあればよいため、Javaが動作する環境ならどこでもRubyプログラムを動かすことができる(コラム「プラットフォームとしてのJava」参照)

3.Javaプログラムと連携できる:
JRubyを使えば、Rubyで書いたプログラムからJavaのオブジェクトを利用したり、逆にJavaプログラムからRubyのスクリプトを実行したりすることができる

またその実行速度は、@ITの記事「本家Rubyより速い」、JRuby開発者に聞くによれば、そのタイトルの如く、Cで実装された通常のRuby実行環境より速いそうだ。

上記のJRubyの特徴は、想定の範囲内である。速度についても、私の想像どおりだった。RubyやPerlのように実行時にソースコードを解釈して実行するインタープリタの速度が遅いのは当然であり、スピードアップにも限界がある。それを、事前にJava中間言語にコンパイルさえしておけば、最適化や高速実行の研究成果が充分に反映されているJavaVMでの実行が速いのは当然、と思っていたからだった。

さらにJRubyは、最終的にRuby On Railsも完全に動作するようになるらしい。このメリットは大きい。最も効率良くWEBアプリを開発できるフレームワークと評判のRuby On RailsがJRubyで動くことで、その欠点の実行速度の遅さが克服できる。

翻って、PythonのJavaによる実装であるJythonは開発が遅い。この数年開発が止まっていたようだが今年の2月ころからまたすこしづつ動き出しているようだ。ただ、いまだにPython2.2レベルだ。最新のPython2.5対応はだいぶ先だろう。

通常のPython実行環境ではなくわざわざJythonを使うメリットはあるのだろうか。私はJRubyほどは存在意義が無いように思う。というのは、通常のPythonは実行速度が充分に速いので、実行速度の点でJythonを使用するメリットは無い。せいぜい、JRubyの特徴の「3」の、Javaクラスとの連携だろう。しかし、それに大きな需要があるとは思わない。JavaクラスをPythonからコントロールするメリットが思い浮かばない。せいぜい、スタンドアローンアプリで画面をJavaのSwingやSWTで構築しそれをJythonから制御する、くらいか。それも、JythonがPython2.4はサポートしてくれないと使いにくいだろう。

結局、通常のRuby実行環境が遅いことがJRubyの将来を明るいものにしている、というちょっと皮肉な現象かもしれない。

 

QLOOK ANALYTICS