加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby和Javascript之间的关键语义差异是什么?

发布时间:2020-12-16 19:39:04 所属栏目:百科 来源:网络整理
导读:如果要在 JavaScript引擎(在浏览器中或在独立的V8或Spidermonkey之上)实现Ruby,Ruby和JS对象模型之间的关键阻抗不匹配是什么? 解决方法 最显眼的是ECMAScript是基于原型的,而Ruby是基于class-plus-mixin的.此外,在Ruby中,封装是通过对象进行的,ECMAScript中
如果要在 JavaScript引擎(在浏览器中或在独立的V8或Spidermonkey之上)实现Ruby,Ruby和JS对象模型之间的关键阻抗不匹配是什么?

解决方法

最显眼的是ECMAScript是基于原型的,而Ruby是基于class-plus-mixin的.此外,在Ruby中,封装是通过对象进行的,ECMAScript中带有闭包.

但是,我猜测Ruby的控制流构造将比对象模型更大一些.毕竟,James Coglan’s JS.Class基本上是在ECMAScript中Ruby的对象模型的实现,而不是那么大.

ECMAScript简单地缺乏在其上构建自己的控制流构造所需的工具.通常,您需要GOTO,继续或适当的尾部呼叫.如果您有其中之一,您可以轻松地实现其他任何事情:异常,循环,开关,线程,光纤,发电机,协程,…您的名字.

但是ECMAScript没有它们(由于很好的理由,至少在GOTO的情况下).唯一的控制流构造ECMAScript具有足够的强大能够构建其他构造,除了是异常.不幸的是,这些都很慢. (尽管如此,它们已被用作实施基础,例如在Microsoft Live Labs Volta编译器中,它使用ECMAScript异常来实现.NET异常,迭代器,生成器甚至线程.)

因此,基本上,如果不是整个解释器(如HotRuby的情况),执行全局CPS转换或类似的操作,基本上您将停止至少实现自己的调用堆栈.

基本上,你想要的是从运行在ECMAScript之上的Ruby引擎

> RubySpec的忠实实现(特别是线程,throw / catch,异常等控制流构造)
>表现和
>与ECMAScript紧密集成(即在两种语言之间来回传递对象和调用方法的能力).

不幸的是,当你必须采取诸如管理自己的堆栈的技巧,做CPS转换,除了例外之外,你可以选择三个目标中的两个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读