我希望我的机架应用程序能够与服务器端 JavaScript 引擎交互。

到目前为止,我知道这可能的唯一方法是在 JVM 上运行 JRuby 和 Rhino,但我希望有一个更精简的解决方案。

有没有人听说过另一种可能更红宝石的选择?

编辑 :阅读评论,我开始认为我错误地假设 JRuby 和 Rhino 在 JVM 上运行意味着 ruby​​ 和 javascript 之间存在某种互操作性......?
无论如何,这对我来说不是一个理想的解决方案,但我仍然想澄清这一点。

有帮助吗?

解决方案

红宝石赛车手 现在已经脱离了 pre-alpha 状态,徘徊在 alpha 和 beta 之间。现在它支持:

  • 从 javascript 调用 ruby​​ 代码
  • 从 ruby​​ 调用 javascript 函数
  • 将 ruby​​ 对象嵌入到 javascript 范围中。
  • 让 ruby​​ 对象 你的 JavaScript 范围

其他提示

  • 约翰逊 是一个 RubyGem,它将 Mozilla SpiderMonkey JavaScript 引擎转变为 MRI C 扩展,并允许 Ruby 和 JavaScript 之间非常深入的集成,
  • 有一个 约翰逊之叉 它将 SpiderMonkey 引擎替换为 Mozilla TraceMonkey 引擎,并且
  • 林登 就像 Johnson,但用 JavaScriptCore 代替 SpiderMonkey,用 MacRuby 代替 MRI。

我想我还记得有人致力于将 V8 与 MRI 一起嵌入,但我现在找不到参考资料。

Johnson 的主要问题是 MRI 是一种极其糟糕的语言实现,它会左右泄漏内存,而世界上唯一可能更糟糕的语言实现是 SpiderMonkey。因此,Johnson Git 存储库中的 TODO 列表并不能完全激发人们的信心;它只包含一项,我逐字引用:

别再出现可怕的段错误了。

Lyndon 建立在更好的基础上,但它显然需要在服务器上运行 OSX。另外,MacRuby 尚未发布。

我认为 JRuby+Rhino 可能是最稳定的选择,尽管您必须自己构建集成:它们只是恰好位于同一虚拟机上的两种独立的语言实现,但它们之间没有集成。

对这个问题的另一种看法是 凯利 这是一个用 Ruby 编写的 JavaScript 解析器和执行引擎。

作为替代方案,您可以尝试从不同的方向解决问题:您可以将应用程序逻辑保留在 Ruby 中并在服务器和客户端上运行,而不是将应用程序逻辑保留在 JavaScript 中并在客户端和服务器上运行:有几个编译器可以将 Ruby(的子集)编译为 JavaScript。其中有 RubyJS. 。(还有 热红宝石, ,这是一个用 JavaScript 编写的 YARV 字节码解释器,但这对于您正在做的事情来说很可能是巨大的杀伤力。)

最后但并非最不重要的一点是,您可以执行 Rails 最初使用其 JavaScript 帮助程序所做的事情:你既不用用 Ruby 也用 JavaScript 来定义你的逻辑,而是用你自己来定义它 一次 在内部 Ruby DSL 中并且 产生 两者都是红宝石 JavaScript 逻辑由此而来。

看一看红宝石犀牛。它使用JRuby和犀牛的JavaScript嵌入到你的红宝石环境。除其他事项外,它支持安全评价,从JavaScript调用,反之亦然(从红宝石JavaScript函数)红宝石功能

有也是“红宝石赛车”,其嵌入到V8 MRI。这仍然是非常预α相,但我希望在明年的三月份可用版本有时

我知道的另一种发动机是咆哮也使用JRuby和犀牛到同样的效果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top