先日の木曜日、YLUGに参加しました。笹田耕一さんの YARV(Yet Another RubyVM) の講演会でした。なんか、会は、過去9年間の間で、１，２を争う盛り上がりだったそうで、すごく楽しかったです。参加者のレベルも高く、YARV の中の話を色々と聞かせていただきました。

その席で、ザイボウズ・ラボの竹迫さんに、「Ruby on JavaScript つくらないの？」とお誘いを受けたので、この週末、作ってみました♪

名づけて、HotRuby。ちゃんと動いているよ〜

http://hotruby.accelart.jp/

基本的な文法は、大体、実装しました。ただし、組み込み関数や組み込みクラスは、大部分が実装されていません。文法面でも、例外は実装していません。

仕組みは、一度、サーバーの Ruby 1.9.0 の YARV でオペコード列にコンパイルさせて、それを JSON でクライアント側に渡し、JavaScript 上の RubyVM で実行しています。つまり、RubyVM on JavaScript です。JSON を JavaScript のソースコードで持っておくと速いのですが、どうしても＜script type="text/ruby"＞を使いたかったので、毎回、サーバーにコンパイルさせています。でも、おかげでコードの最後の微調整は楽でした！

sum = "" 50000 .times(|e| sum += e.to_str)

というベンチマークを動かしてみました。HotRuby@Opera9 で 6.767秒、Ruby 1.9.0 で 12.051秒と、Ruby(YARV)よりも 78% も速かったです！

でも、IE でベンチマークはとらないでね (^^;;;;

まぁ、GUIを操作するだけに、そんなにCPUパワーはいらなく、複雑な処理はサーバー側で処理すればいいだけなので、十分だと思います。

http://hotruby.accelart.jp/test-web/diy.html で自分で Ruby のソースを貼り付けて、実行させることができます。HotRuby 自体は "Ruby License" です。「これが動かないよ！」とか「このメソッド実装したよ！」とかソースでいただけたら、嬉しいです！

クライアント側は、Array, Hash, String, Time などがちゃんと実装されていれば、あとは、そんなに組み込みクラスはいらなく、それよりも、DOM や ExtJS などの GUI ライブラリの Ruby ラッパーの方が重要です。

では、よいお年を〜♪