6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

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

6
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?