JRubyの主要開発者であるCharles Nutter氏は自身のブログにおいてThe Power of the JVMのタイトルのもとスクリプト言語とJava仮想マシンに関する興味深いドキュメントを公開した。Charles Nutter氏はフルタイムでSun Microsystemsに雇用されており、Java仮想マシンとスクリプト言語について語るには適切な人材のひとり。

JRubyは最新版のJRuby 1.1で劇的にパフォーマンスを向上させた。多くの改善が施されたわけだが、特にコールパスを短縮するために導入された次の2つの方法が効果的であったことが説明されている。どちらも典型的な最適化方法のひとつだ。

  • リフレクションの代わりにスタブメソッドを活用
  • コールサイトキャッシュを活用

Groovyは1.5まで機能を増やすことに注力してきたが、パフォーマンスが低いという欠点があった。現在開発が進められているGroovy 1.6では上記の方法でパフォーマンスの向上がはかられており、最新のコードはJRubyのベンチマーク結果をも凌駕していると言及されている。同方法がJava仮想マシンにおけるスクリプト言語の実装において効果的なテクニックであることが示された形になった。

JRubyとGroovyは今後もパフォーマンスを随時向上させる目処がたっており、結果的にスクリプト実行環境の実装でJava仮想マシンでも十分にパフォーマンスが出せることがJRubyとGroovyによって実証されたわけだが、実装者にそれ相応の負担がかかることも明らかになった。Java仮想マシンで実装を軽減するための機能を実現することが、Java仮想マシンをスクリプト実行環境として普及させるためのひとつの鍵となるわけだ。

そういった要求に答えるため、SunはJSR 292: Supporting Dynamically Typed Languages on the Java Platformにおいて型を特定せずにコールを可能にする命令をJava仮想マシンに追加することについて検討を続けてきたが、どうやらこの取り組みは実を結ばないことになるか、大きくその内容を変えることになりそうだ。JSR 292は一見すると有益な方法であるように思えるが、同氏はこれまでの開発から、Javaの型をそのままスクリプト言語の型として使うことがないためJSR 292にはほとんど効果がないことがわかったと説明している。

そして同氏はこれまでの開発の経験からJava仮想マシンでスクリプト言語の実装をサポートするために必要になる機能についてまとめている。これら新しい機能はJDK7で登場することになりそうだ。それら機能はJRubyやGroovyで使われるほか、JythonやRhinoなどJava仮想マシンを使うほかのスクリプト言語にも効果を発揮することになる。Java仮想マシンをスクリプト言語へと拡張する流れは今後も継続することになりそうだ。