是否有任何 Ruby / Python 功能阻止的优化 (如内联缓存) V8 引擎实现了吗?

通过 Google 专家共同开发 Python,因此不应被软件专利。

或者,这相当重要的资源让 Google 成为 V8 项目。

2011-03-02 14:20:15
问题评论:

自查和运算符重载可能大冲突,但我不知道 JS 很好地为您提供一个真实的答案。PyPy 项目是 Python 的可能最大限度地达到 JS 种速度。

您有任何示例 PyPy 比 V8为计算机语言 shootout,它是完整的 bollocks (只需查找如何以不同的方式存在不同语言实现的东西)。或者,它只是 google 的现实扭曲字段?

V8 与 Python 不完全一样。等待直到 V8 具有实现 1.8 的 Javascript 规范,以便更好地进行比较。然后,在那时我确信某人将尝试在 Javascript 代替了 V8 引擎实现 PyPy。

为什么是您因此确保 V8 是 Python 或者 Ruby 比速度更快?在做什么?

V8 是 Python/Ruby 比绝对快。没有任何一种希望,从简单的 microbenchmark 对这两种环境中 idiomatically 编写的全面的现实应用程序的准则。它是对大多数语言本机操作更快一个数量级 (ie。 不会获取委托给 Python 中的 C 代码的东西)。

回答:

什么阻止了 Ruby,Python 可以获得 Javascript V8 速度?

执行任何操作。

嗯,好的︰ 金钱。(和时间、 人员和资源,但如果有了钱,可以买那些。)

V8 的艳丽、 高度专业、 高经验 (和因此高度支付) 工作的工程师,具有数十年经验 (我所讲述的单独--共同的更像世纪) 中创建动态 OO 语言的高性能执行引擎的团队。它们基本上是同一还创建 Sun 热点 JVM (等) 的人。

Lars Bak,开发人员主管,实际上一直在 Vm 上 25 年 (和所有这些虚拟机包含潜在顾客最多 V8),基本上是他一生的 (专业)。某些编写拼音 Vm 的人甚至不 25 岁。

是否有任何 Ruby / Python 功能,阻碍实现优化 (如内联缓存) V8 引擎吗?

鉴于至少 IronRuby、 JRuby,MagLev、 MacRuby 和 Rubinius 有 monomorphic (IronRuby) 或多态内联缓存,答案是显然没有。

现代的 Ruby 实现已经做了大量的优化。例如,对于某些操作,Rubinius 的Hash类是比 YARV 的速度快。现在,这听不太令人兴奋直到您意识到 Rubinius 的Hash类将实现 100%纯 Ruby,而 YARV 的实现 100%的手动优化 c。

因此,至少在某些情况下,Rubinius 可以生成更好的代码比 GCC !

或者,这相当重要的资源让 Google 成为 V8 项目。

是的。不只是 Google。V8 的源代码的沿袭已 25 年现在。人从事 V8 还创建自我 VM (到这一天一个快动态 OO 语言执行引擎创建过),Animorphic 由 Smalltalk VM (到这一天创建过的最快由 Smalltalk 执行引擎之一)、 热点 JVM (创建过快 JVM,可能最快的 VM 期) 和 OOVM (一种最有效的由 Smalltalk Vm 创建过)。

事实上,Lars Bak,开发人员主管的 V8,工作,再加上一些其它的每一个

可以我们有一些参考资料"至少鉴于 IronRuby、 JRuby,MagLev、 MacRuby 和 Rubinius 有 monomorphic (IronRuby) 或多态内联缓存,答案很明显,否"请?

SpiderMonkey 具有相当的性能,因此,怎么 Mozilla 然后做到了吗?他们已经非常有限的资金.

@SalmanPK︰ 不是他们第一个 VM,并且有过工作在 Mozilla 的聪明人。

@SalmanPK、 还是︰ 至少部分由创建它们的 JS VM 的 Mozilla 实施反向工程的 V8。blog.mozilla.org/dmandelin/2010/09/08/presenting-jagermonkey

@Ian V8 是开源 (BSD 许可证),因此不需要进行反向工程,只要看他们在做什么。

没有更多推动力以高度优化 JavaScript interpretors 这是为什么我们看到这么多 Mozilla、 Google 和微软之间要放入它们的资源。JavaScript 有下载、 分析、 编译和实时运行时 (通常是急躁的) 的人正在等待,它具有运行人员互动,而这一台计算机、 一部电话或烤箱,可能会不受控制的客户端环境中进行。它具有在这些条件下有效地运行的效率提高。

Python 和 Ruby 开发/部署者通过控制环境中运行。强劲的服务器或台式机系统通常将在其中放置的限制因素诸如内存或磁盘 i/o 的操作,并且不执行时间。或利用非引擎优化缓存等。这些语言它可能确实会使重点关注语言和库功能将设置为高于速度优化更有意义。

这项额外的好处是我们有两个很好的高性能打开源 JavaScript 引擎可以并正在重新 purposed 的 Node.js 类应用程序的所有方式。

工作正常的部件,它必须处理社区。Python 和 Ruby 在大多数情况下有没有企业的支持。没有人获取支付全职工作在 Python 和 Ruby (和它们尤其不获得报酬从事 CPython 或 MRI 的整个时间)。另一方面,V8,由世界上最强大的 IT 公司支持。

此外,V8 会快一些因为唯一看重的 V8 人是解释器--他们有从事任何标准库、 没有语言设计有关的问题。他们只需编写了解释器。就是这样。

它与知识产权法律无关。也不 Python 联合开发 Google 专家 (其创建者那里它与其他几个 committers,但他们没有获得报酬从事 Python)。

Python 速度的另一个障碍是 Python 3。成才似乎是语言开发人员 — 他们已冻结开发的新的语言功能,直到其他实现追赶的点成为主要问题。

到技术的细节,我不知道很多关于拼音,但 Python 有许多地方,其中可用于优化 (和 Unladen 处理,Google 项目,启动实施这些前 biting 灰尘)。这里是一些他们计划的优化我看看在将来获得 V8 速度,如果 a la PyPy JIT 获取实现 CPython,但是,不会不太可能是为未来几年 (现在的重点是 Python 3 采用,不是 JIT) 的 Python。

许多还觉得,拼音和 Python 会受益非常删除其相应的全局解释器锁.

您还需要了解,Python 和 Ruby 是这两种更重语言比 JS — 它们提供远更妨碍标准库、 语言功能和结构。类的单独对象定位的系统中添加大量的重量 (在一种好方法,我认为)。我几乎认为的 Javascript 语言,用于嵌入,像 Lua (和在许多方面,它们是类似)。Ruby 和 Python 具有更为丰富的功能,并且该表示形式通常要代价速度。

实际上 moratorium 上的新功能得到提升后 Python 3.2 的新版本。

+ 1,但不会冻结新的语言功能意味着更多的时间花在优化?

如果只有,@Andrew。重点是使 Jython、 IronPython 和 PyPy 快速,等待库转换为 Python 3 和 evangelizing 的 Python 3。

"对象方向的单独的类系统中添加了大量的重量"-像 V8 的现代 JavaScript 虚拟机具有的类,它们只是隐式。就像在 Python 中您不需要显式键入您不必显式键入类的 JavaScript 变量。虚拟机是聪明地仔细检查您的代码并提取的类。

因为我知道它,V8 是 JIT 编译器,而不是解释器...我很肯定两者之间的区别。也许不...我不知道。

似乎是核心 Python 开发人员,他们似乎觉得"不够快"是不够好,主要关注性能和功能,可帮助程序员,是工作效率更高是更重要的不是功能,可帮助计算机运行速度更快的代码。

事实上,但是,没有 (现在被放弃) Google 项目, unladen 允许存在,以生成更快 Python 解释器与标准解释程序兼容。PyPy是打算产生更快的 Python 的另一个项目。此外,还有Psyco,forerunner PyPy,可提供不出整个解释器更改许多 Python 脚本的性能提升,和Cython,它允许您为使用类似于 Python 语法非常相似的 Python 编写高性能 C 库。

使人产生误解的问题。V8 是 JIT (只在实时编译器) 实现的 JavaScript 和在其最受欢迎的非浏览器实现 Node.js 周围事件循环构造。CPython 不是 JIT 和没有遇到。但这些存在于 Python 最常在 PyPy 项目-CPython 2.7 (以及很快为 3.0 +) 兼容的 JIT。还有的例如像龙卷风一样的遇到服务器库加载。PyPy 运行龙卷风 vs Node.js 之间存在的真实世界的测试和性能差异是轻微。

一提龙卷风为 + 1。而以相当的速度去往 Node.js,Python 生成器以及其gen.engine模块和yield语句 (因为 2.5!!!可以重新定义异步代码。

由于您的帖子,pypy 发布支持稳定 3.x 版 (并且能在改善的支持,当然)︰ morepypy.blogspot.fr/2014/06/pypy3-231-fulcrum.html

请输入您的翻译

What blocks Ruby, Python to get Javascript V8 speed? [closed]

确认取消