6

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

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

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

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

4

3 回答 3

9

Ruby Racer现在已经结束了 pre-alpha,并且徘徊在 alpha 和 beta 之间。它现在支持:

  • 从 javascript 调用 ruby​​ 代码
  • 从 ruby​​ 调用 javascript 函数
  • 将 ruby​​ 对象嵌入到 javascript 范围内。
  • 让 ruby​​ 对象成为你的 javascript 作用域
于 2010-03-03T21:31:14.373 回答
7
  • Johnson是一个 RubyGem,它将 Mozilla SpiderMonkey JavaScript 引擎转换为 MRI C 扩展,并允许在 Ruby 和 JavaScript 之间进行非常深入的集成,
  • Johnson的一个分支用 Mozilla TraceMonkey 引擎替换了 SpiderMonkey 引擎,并且
  • Lyndon就像 Johnson,但使用 JavaScriptCore 代替 SpiderMonkey 和 MacRuby 代替 MRI。

我想我还记得有人致力于将 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 中定义一次,然后从中生成RubyJavaScript 逻辑。

于 2009-11-24T17:36:49.730 回答
2

看看红宝石犀牛。它使用 jruby 和 rhino 将 javascript 嵌入到您的 ruby​​ 环境中。除其他外,它支持安全评估,从 javascript 调用 ruby​​ 函数,反之亦然(来自 ruby​​ 的 javascript 函数)

还有将 v8 嵌入 MRI 的“The Ruby Racer”。这仍然是非常预 alpha 阶段,但我希望在明年 3 月的某个时候有一个可用的版本

我知道的另一个引擎是 Snarl,它也使用 jruby 和 rhino 来达到类似的效果。

于 2009-11-24T21:19:09.143 回答