- Johnsonは、Mozilla SpiderMonkey JavaScript エンジンを MRI C 拡張に変え、Ruby と JavaScript の間の非常に深い統合を可能にする RubyGem です。
- SpiderMonkey エンジンを Mozilla TraceMonkey エンジンに置き換えるJohnsonのフォークがあります。
- Lyndonは Johnson に似ていますが、SpiderMonkey の代わりに JavaScriptCore を、MRI の代わりに MacRuby を使用しています。
V8 を MRI に埋め込む作業を行っている人も覚えていると思いますが、現在は参考文献が見つかりません。
Johnson の主な問題は、MRI が信じられないほどくだらない言語実装であり、左右にメモリ リークが発生することです。世界で唯一、さらにくだらない可能性がある言語実装は SpiderMonkey です。したがって、Johnson Git リポジトリの TODO リストは、必ずしも自信を刺激するものではありません。1つのアイテムしか含まれておらず、文字通り引用します:
セグメンテーション違反をやめましょう。
Lyndon ははるかに優れた基盤の上に構築されていますが、サーバー上で OSX を実行する必要があることは明らかです。さらに、MacRuby はまだリリースされていません。
JRuby+Rhino がおそらく最も安定したオプションだと思いますが、統合を自分で構築する必要があります。それらはたまたま同じ VM 上に存在する 2 つの独立した言語実装ですが、それらの間に統合はありません。
この問題に対する別の見方は、Ruby で書かれた JavaScript パーサーおよび実行エンジンであるRKellyです。
別の方法として、別の方向から問題にアプローチすることもできます。アプリケーション ロジックを JavaScript に保持し、それをクライアントとサーバーの両方で実行する代わりに、アプリケーション ロジックを Ruby に保持し、それをサーバーとサーバーで実行することができます。クライアント: Ruby (のサブセット) を JavaScript にコンパイルできるコンパイラがいくつかあります。それらの 1 つがRubyJSです。(JavaScript で記述された YARV バイトコード インタープリターであるHotRubyもありますが、これは、あなたが行っていることに対して非常にやり過ぎになる可能性が非常に高いです。)
そして最後に重要なこととして、Rails が元々 JavaScript ヘルパーで行っていたことを行うことができます。Ruby でも JavaScript でもロジックを定義するのではなく、Ruby の内部 DSLで一度定義し、そこから RubyとJavaScriptの両方のロジックを生成します。