コミュ障だから明日が僕らをよんだって返事もろくにしなかった

何かを創る人に憧れたからブログをはじめたんだと思うよ

RubyはJVMで動くから実質Javaです

この世の全てのものはJavaで動いている

ちょっと昔、どこかの技術サイトで怪文書が話題になりました。まあ、僕もこんなところで怪文書書いてるんで人のこと言えないんですけどね。で、読んだらJavaのサブルーチン的利用がRubyとかなんかそんな感じのことを書かれている文章でした。まあ、実際のアーキテクチャとかが見えてこないので何とも言えないし、僕もそういうのスーパー素人なんでよくわからないです。でも、JVMで動く言語は全部Javaの一種だってことにしていいと思ったんです(クソ適当意見)。だから今日はRubyJavaだって言う無茶苦茶な主張をするために筆を取りました。



まあいいや(よくない)。ということで今日はJVMで動くRubyをいじろうかと思います。RubyそのものはJVM上で動いてないんですけどJRubyを使うとJVM上で動くようにしてくれるとのことです。

公式
Home — JRuby.org

JRuby は、RubyインタプリタJavaによる実装である。フリーソフトウェアであり、CPL/GPL/LGPL の3つのライセンスを採用している。JRubyJavaと密に連携しており、インタプリタを任意のJavaアプリケーションに埋め込むことができ、JavaRubyのコード間で双方向のアクセスを可能にしている。

まあなんのこっちゃって感じですけど、おおよそRubyJava 変換器です。Javaの堅牢さをそのままRubyに移植したいとかそんな願いから生まれた産物なんだと思ってる。

さわってみた

公式からダウソしてきて、対話環境を実行すると以下のようになります。Rails入れたりしてまともに遊ぶつもりはないので、対話環境です。細かい仕様は確認してないけどどうせRubyだろうし問題ないと思って突き進みます……。

C:***>irb
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.jruby.runtime.encoding.EncodingService to field java.io.Console.cs
WARNING: Please consider reporting this to the maintainers of org.jruby.runtime.encoding.EncodingService
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
irb(main):001:0>

なんかめっちゃ警告出た。まあ、Warningだし地雷踏まない限り動くんでそのまま続行します。とりあえずハロワでも作りましょうか。

irb(main)> import 'java.lang.System'
=> [Java::JavaLang::System]
irb(main)> System.out.println("This is Java")
This is Java
=> nil

はい、できました。RubyJava動きました。逆はScriptingContainer使えばいけるっぽいです(未検証)。

参考:ドキュメント
JRuby Core 1.7.20 API


とまあ、そんな感じでJVM上でRubyが動くのを確認できました。なのでRubyJavaです。

Q.E.D.





これまじめにプログラム書いている人に怒られる奴だけど、細かいことを気にしてはいけない。個人ブログはいつだって怪文書に満ちあふれているのだから…。


おわり





そういえば某怪文書RubyC++もサブルーチンの関係にあるってあったけどCrystal使うってことなんですかね……?