【发布时间】:2011-07-27 19:28:36
【问题描述】:
如果要在 Javascript 引擎之上(在浏览器中或在独立的 V8 或 Spidermonkey 之上)实现 Ruby,那么 Ruby 和 JS 对象模型之间的关键阻抗不匹配会是什么?
【问题讨论】:
-
我在查看 SpiderMonkey 跟踪 JIT 的架构时想到了这个问题——它是否也可以作为 Ruby 实现的核心。为浏览器编写 Ruby 也很好(就像 GWT 为 Java 编写的那样)——在这种情况下,我想对可以使用的库和语言特性会有很多限制。
-
我认为到目前为止(Marc-André Lafortune 在评论中指出的)最大的问题是缺少方法/常量和自动加载功能。未来版本的 Ecmascript 将包含可能允许有效实施的“代理”:wiki.ecmascript.org/doku.php?id=harmony:proxies
-
实际上,无论 Firefox 4 中的 TraceMonkey 版本是什么,我都非常确定代理存在,我希望其他实现者也能效仿,因为它们对安全性非常有用. (参见,例如 Mark S. Miller 的 SES(安全 ECMAScript)和 Dr. SES(分布式弹性安全 ECMAScript)工作)。
-
TraceMonkey 跟踪 JIT 主要由
nanojit组成,无论如何它是一个独立于语言的 JIT 编译器,不是吗?如果你想要的只是一个带有跟踪 JIT 的 Ruby 实现,那么真的不需要编译到 ECMAScript,只需将nanojit连接到 Rubinius。或者用 PyPy 编写一个 Ruby 实现,它的跟踪 JIT 非常棒。 (顺便说一句,PyPy 有一个 ECMAScript 后端,所以你实际上是用一块石头杀死了两只鸟。更像是 4 只鸟,因为用 PyPy 编写的 Ruby 实现可以在 JVM、.NET 和 ECMAScript 上本地运行。 ) -
@Jörg 感谢 PyPy 的指针 - 这看起来确实是一个有趣的项目。
标签: javascript ruby programming-languages v8 spidermonkey