Hatena::ブログ(Diary)

yukobaのブログ このページをアンテナに追加 RSSフィード Twitter

2007年12月31日 HotRuby - Ruby on JavaScript

[]HotRuby - Ruby on JavaScript

先日の木曜日YLUGに参加しました。笹田耕一さんの YARV(Yet Another RubyVM) の講演会でした。なんか、会は、過去9年間の間で、1,2を争う盛り上がりだったそうで、すごく楽しかったです。参加者レベルも高く、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 ラッパーの方が重要です。

では、よいお年を〜♪