RubyFlux を使って Ruby から Java へコードを変換する

  • 6
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

RubyFlux を使うと、Ruby で書いたコードを Java コードに変換することができます。
ほぼ README に書かれているままですが、こんな感じです。
あ、環境は mac です。

# JRubyが入ってなかったのでインストールする
# ( rbenv 使ってます)
$ rbenv install jruby-1.7.1
$ rbenv local jruby-1.7.1
# リポジトリを引っ張ってくる
$ git clone git://github.com/headius/rubyflux.git
$ cd rubyflux
# maven でパッケージを作る
# maven が入ってない場合は
# $ brew install maven
# とかで、インストールしておく
$ mvn package
# ここまでは、1回やっておけば良い
# Rubyでコード書く
$ vim fib.rb
$ cat fib.rb
fib.rb
def fib(a)
  if a < 2
    a
  else
    fib(a - 1) + fib(a - 2)
  end
end

puts fib(40)
# とりあえず、JRubyで実行してみる
$ ruby fib.rb
102334155
# Javaコードを生成、コンパイルして実行する
$ rake run[fib.rb]
jruby -I target:src/main/ruby src/main/ruby/ruby_flux.rb fib.rb
javac fib.java
java fib
102334155
# 生成されたJavaのコードを見てみる
$ cat build/fib.java
build/fib.java
public class fib extends RObject {
    public static void main(String[] args) {
        new fib().$main();
    }

    public void $main() {
        RObject $last = RNil;
        $last = puts(fib(new RFixnum(40L)));
        ;
    }

    public RObject fib(RObject a) {
        RObject $last = RNil;
        if (a.$less(new RFixnum(2L)).toBoolean()) {
            $last = a;
        } else {
            $last = fib(a.$minus(new RFixnum(1L))).$plus(
                    fib(a.$minus(new RFixnum(2L))));
        }
        $last = $last;
        return $last;
    }

実用性があるかどうかはまだ分かりませんが、面白いですね。