我希望我的机架应用程序能够与服务器端 javascript 引擎交互。
到目前为止,我知道这可能的唯一方法是在 JVM 上运行 JRuby 和 Rhino,但我希望有一个更精简的解决方案。
有没有人听说过另一个可能更红宝石的选项?
编辑:阅读评论我开始认为我误以为在 JVM 上运行 JRuby 和 Rhino 意味着 ruby 和 javascript 之间的一些互操作性......?
无论如何,这对我来说不是一个理想的解决方案,但我仍然想澄清这一点。
我希望我的机架应用程序能够与服务器端 javascript 引擎交互。
到目前为止,我知道这可能的唯一方法是在 JVM 上运行 JRuby 和 Rhino,但我希望有一个更精简的解决方案。
有没有人听说过另一个可能更红宝石的选项?
编辑:阅读评论我开始认为我误以为在 JVM 上运行 JRuby 和 Rhino 意味着 ruby 和 javascript 之间的一些互操作性......?
无论如何,这对我来说不是一个理想的解决方案,但我仍然想澄清这一点。
Ruby Racer现在已经结束了 pre-alpha,并且徘徊在 alpha 和 beta 之间。它现在支持:
我想我还记得有人致力于将 V8 嵌入 MRI,但我现在找不到参考资料。
Johnson 的主要问题是 MRI 是一种非常糟糕的语言实现,它会左右泄漏内存,而世界上唯一可能更糟糕的语言实现是 SpiderMonkey。因此,Johnson Git 存储库中的 TODO 列表并不能完全激发信心。它只包含一项,我从字面上引用:
停止该死的段错误。
Lyndon 建立在一个更好的基础之上,但它显然需要在服务器上运行 OSX。另外,MacRuby 还没有发布。
我认为 JRuby+Rhino 可能是最稳定的选择,尽管您必须自己构建集成:它们只是碰巧存在于同一 VM 上的两种独立语言实现,但它们之间没有集成。
RKelly是对这个问题的不同看法,它是一个用 Ruby 编写的 JavaScript 解析器和执行引擎。
作为替代方案,您可以尝试从不同的方向解决问题:您可以将应用程序逻辑保留在 Ruby 中并在服务器上运行,而不是将应用程序逻辑保留在 JavaScript 中并在客户端和服务器上运行。客户端:有几个编译器可以将 Ruby(的一个子集)编译为 JavaScript。其中有RubyJS。(还有HotRuby,它是一个用 JavaScript 编写的 YARV 字节码解释器,但这很可能对你正在做的事情来说太过分了。)
最后但同样重要的是,您可以像 Rails 最初使用其 JavaScript 助手所做的那样:您既不用在 Ruby 也用 JavaScript 定义逻辑,而是在内部 Ruby DSL 中定义一次,然后从中生成Ruby和JavaScript 逻辑。
看看红宝石犀牛。它使用 jruby 和 rhino 将 javascript 嵌入到您的 ruby 环境中。除其他外,它支持安全评估,从 javascript 调用 ruby 函数,反之亦然(来自 ruby 的 javascript 函数)
还有将 v8 嵌入 MRI 的“The Ruby Racer”。这仍然是非常预 alpha 阶段,但我希望在明年 3 月的某个时候有一个可用的版本
我知道的另一个引擎是 Snarl,它也使用 jruby 和 rhino 来达到类似的效果。