6

ラック アプリケーションがサーバー側の JavaScript エンジンと連携できるようにしたいと考えています。

今のところ、これが可能であるとわかっている唯一の方法は、JVM で JRuby と Rhino を実行することですが、より無駄のないソリューションを望んでいます。

おそらく別の、よりルビーっぽいオプションについて聞いたことがありますか?

編集:コメントを読んで、JRubyとRhinoの両方をJVMで実行すると、ルビーとjavascriptの間の相互運用性が示唆されると誤解していると思い始めています...?
とにかく、それは私にとって望ましい解決策ではありませんが、それでも解決したいと思います。

4

3 に答える 3

9

Ruby Racerは現在プレアルファ版ではなく、アルファ版とベータ版の間のどこかでホバリングしています。現在、以下をサポートしています。

  • javascriptからrubyコードを呼び出す
  • rubyからjavascript関数を呼び出す
  • rubyオブジェクトをjavascriptスコープに埋め込みます。
  • rubyオブジェクトjavascriptスコープにする
于 2010-03-03T21:31:14.373 に答える
7
  • 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で一度定義し、そこから RubyJavaScriptの両方のロジックを生成します。

于 2009-11-24T17:36:49.730 に答える
2

The Ruby Rhinoをご覧ください。jruby と rhino を使用して、JavaScript を Ruby 環境に埋め込みます。とりわけ、安全な評価をサポートし、javascript から ruby​​ 関数を呼び出したり、その逆 (ruby からの javascript 関数) を呼び出したりします。

MRIにv8を埋め込んだ「The Ruby Racer」もあります。これはまだプレアルファ段階ですが、来年の 3 月には使用可能なバージョンを提供したいと考えています。

私が知っているもう 1 つのエンジンは、同様の効果を得るために jruby と rhino を使用する Snarl です。

于 2009-11-24T21:19:09.143 に答える