代码之家  ›  专栏  ›  技术社区  ›  julien

服务器端JavaScript引擎的Ruby绑定?

  •  6
  • julien  · 技术社区  · 15 年前

    我希望我的框架应用程序能够与服务器端的javascript引擎接口。

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

    有人听说过另一个更为鲁莽的选择吗?

    编辑:阅读评论时,我开始认为我错了,假设jruby和rhino都在JVM上运行,这意味着Ruby和javascript之间的互操作性…?
    不管怎样,这对我来说不是一个理想的解决方案,但我还是想澄清一下。

    3 回复  |  直到 14 年前
        1
  •  9
  •   Charles Lowell    14 年前

    The Ruby Racer 现在已经脱离了alpha前阶段,并在alpha和beta之间徘徊。它现在支持:

    • 从javascript调用Ruby代码
    • 从Ruby调用javascript函数
    • 将Ruby对象嵌入到JavaScript范围中。
    • 让Ruby对象 您的javascript范围
        2
  •  7
  •   Jörg W Mittag    15 年前
    • Johnson 是一个rubygem,它将mozilla spidermonkey的javascript引擎转化为一个mri c扩展,并允许ruby和javascript进行非常深入的集成,
    • 有一个 fork of Johnson 它用Mozilla TraceMonkey引擎替换了spidermonkey引擎,并且
    • Lyndon 像约翰逊一样,但用javascriptcore代替蜘蛛猴,用macruby代替mri。

    我想我还记得有人在用核磁共振技术嵌入V8引擎,但我现在找不到参考资料。

    约翰逊的主要问题是,MRI是一种难以置信的蹩脚的语言实现,它左右泄漏内存,而世界上唯一可能更蹩脚的语言实现是蜘蛛猴。因此,Johnson Git存储库中的todo列表并不能完全激发信心;它只包含一个项目,我逐字引用:

    别再胡思乱想了。

    林顿是建立在一个更好的基础上的,但是它显然需要在服务器上运行OSX。另外,MacRuby还没有发布。

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

    另一个问题是 RKelly 这是一个用Ruby编写的JavaScript解析器和执行引擎。

    作为一种替代方法,您可以尝试从不同的方向来解决这个问题:不将应用程序逻辑保存在javascript中,并在客户机和服务器上运行它,而是将应用程序逻辑保存在Ruby中,并在服务器和客户机上运行它:有几个编译器可以编译(一个子集(共)ruby到javascript。在他们身上 RubyJS . (还有) HotRuby ,这是一个用javascript编写的yarv字节码解释器,但这很可能会对您所做的工作造成巨大的破坏。)

    最后,你也可以像Rails最初对他们的javascript助手所做的那样:你既不能用Ruby也不能用javascript定义你的逻辑,而是定义它。 一旦 在内部Ruby DSL中, 生成 都是露比 JavaScript逻辑。

        3
  •  2
  •   Charles Lowell    15 年前

    看一看 The Ruby Rhino . 它使用JRuby和Rhino将JavaScript嵌入到Ruby环境中。除此之外,它还支持安全评估,从JavaScript调用Ruby函数,反之亦然(Ruby的JavaScript函数)

    还有“红宝石赛车”,它把V8引擎嵌入到核磁共振成像中。这仍然是非常多的阿尔法前阶段,但我希望在明年3月的某个时候有一个可用的版本

    我知道的另一个引擎是“陷阱”,它也使用JRuby和Rhino产生类似的效果。