BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース JRubyコンパイラが完成

JRubyコンパイラが完成

Charles Nutter氏はしばらくの間JRubyのRubyからJava Bytecodeまでのコンパイラを手がけてきたが、遂にそれが完成したようだ(source)
コンパイラを完成させるBEGINとENDブロックのコンパイルを終了したばかりです。またスタンダードライブラリ全体をコンパイルし、コンパイルスクリプト外でRIBとRubyGemsを動作させることに成功しました。(参考に:.rbファイルは全て削除しました。)
これによってJRuby1.1で計画されているいくつかのアイテムが完成することになる(source)。またこれによって11月上旬に開催されるRubyConf2007(サイト・英語)にてリリースが予定されている、JRuby 1.1にコンパイラが含まれることになる。

更なる詳細はJRubyコンパイラのブログアナウンスにて閲覧できる(source)
前代未聞である、フル装備のRuby1.8コンパイラが完成しました。Rubyのシンタックスに対応できるとされている、もしくはスタンダードライブラリ全体 をコンパイルするコンパイラが他にもありましたが、それらは私の言う”完成”には達していなかったのです。というのも私はstdlib.rbファイルの削除、また IRBやRubyGemsのような重要なアプリケーションを作動し続けることを可能にしました。私はその功績をとても誇りに思っています。JRubyは初めての完成型で、機能的な1.8セマンティックコンパイラを備えています。これはなかなかの功績だと思うのです。
もう一つの異なるタイプのコンパイルに関する計画が進められている。これはJavaとRubyの更なる統合を促進するものとされている。
コンパイラ#2は基本的にRubyクラスを与えられたファイルの中に持っていき(もしくは複数のRubyクラス)、通常のJavaタイプを生成します。このタイプは外観も感触も他のJavaクラスと同じようなものです。
  • それをJavaコードから通常の新しいMyClass(arg1,arg2)で例示化することが可能
  • Javaからの呼び出しでその全てのメソッドを呼び出すことができる
  • 自分が所有しているJavaクラスで拡張可能
この統合において、これらのクラスをJavaから使用するのを可能にするためには未だいくつか強化が必要となる。例えばある特定のシグネチャーでメソッドを定義することである。Rubyはシグネチャー用の明確な情報を備えていないので、何らかの次善策が必要となってくるのだ。
私はRubyメソッドのシグネチャーを特定するための独立な実装の方法を、全体を通して考えていました。私の中での条件はJRuby内にても作動できる同じコードか修正なしのRubyなのであるが、jRuby内においてはJavaからの付加的な呼び出し用静的シグネチャーを得るのです。
class MyClass
...
{String => [Integer, Array]}
def mymethod(num, ary); end
end
もしもこれになじみがなかったら、これは基本的に単に文字通りのハッシュシンタックスであると考えると良いのです。リターンタイプ、ストリングはIntegerと Arrayの二つのメソッドオーギュメントに関連しているものです。通常のRuby実装においてこのハッシュ構築のラインは実行され、またそれはハッシュがごみを収集しながら実行されるでしょう。しかしながらコンパイラ#2はクラス本体でこれらのラインに遭遇し、下記のようなメソッドを作るためにそれを使用するのです。
    public String mymethod(int num, List ary) {
...
}
原文はこちらです:http://www.infoq.com/news/2007/09/jruby-compiler-finished

この記事に星をつける

おすすめ度
スタイル

BT