Posted at

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

More than 5 years have passed since last update.

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;
}


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