是否有Ruby / Python特性阻碍了V8引擎的优化实现(例如内联缓存)?
Python是由谷歌的人共同开发的,所以它不应该被软件专利所阻止。
或者这是谷歌在V8项目中投入的资源问题。
是否有Ruby / Python特性阻碍了V8引擎的优化实现(例如内联缓存)?
Python是由谷歌的人共同开发的,所以它不应该被软件专利所阻止。
或者这是谷歌在V8项目中投入的资源问题。
当前回答
我刚刚遇到了这个问题,还有一个很大的技术原因导致了性能差异,但没有提到。Python有一个非常强大的软件扩展生态系统,但这些扩展大多数是用C或其他低级语言编写的,以提高性能,并与CPython API紧密相关。
有很多众所周知的技术(JIT、现代垃圾收集器等)可以用来加速CPython的实现,但所有这些技术都需要对API进行重大更改,破坏了过程中的大多数扩展。CPython会更快,但是Python吸引人的很多东西(广泛的软件堆栈)将会丢失。举个例子,有一些更快的Python实现,但与CPython相比,它们几乎没有吸引力。
其他回答
Misleading question. V8 is a JIT (a just in time compiler) implementation of JavaScript and in its most popular non-browser implementation Node.js it is constructed around an event loop. CPython is not a JIT & not evented. But these exist in Python most commonly in the PyPy project - a CPython 2.7 (and soon to be 3.0+) compatible JIT. And there are loads of evented server libraries like Tornado for example. Real world tests exist between PyPy running Tornado vs Node.js and the performance differences are slight.
正如其他人所提到的,Python有一个PyPy形式的高性能JIT编译器。
Making meaningful benchmarks is always subtle, but I happen to have a simple benchmark of K-means written in different languages - you can find it here. One of the constraints was that the various languages should all implement the same algorithm and should strive to be simple and idiomatic (as opposed to optimized for speed). I have written all the implementations, so I know I have not cheated, although I cannot claim for all languages that what I have written is idiomatic (I only have a passing knowledge of some of those).
我没有任何明确的结论,但PyPy是我得到的最快的实现之一,比Node好得多。相反,CPython位于排名最慢的一端。
性能似乎并不是核心Python开发人员的主要关注点,他们似乎觉得“足够快”就足够好了,而且帮助程序员提高工作效率的功能比帮助计算机更快地运行代码的功能更重要。
然而,确实有一个谷歌项目unladen-swallow(现在已被放弃),目的是生产一个与标准解释器兼容的更快的Python解释器。PyPy是另一个旨在生成更快Python的项目。还有Psyco,它是PyPy的前身,它可以在不更改整个解释器的情况下为许多Python脚本提供性能提升,还有Cython,它允许您使用非常类似于Python语法的东西为Python编写高性能C库。
由于JIT、曲轴、类型推断器和数据优化代码,V8的速度很快。标记指针,双精度对象的nan标记。 当然,它会在中间进行正常的编译器优化。
普通的ruby, python和perl引擎都不做这些,只是做了一些基本的优化。
唯一接近的主流虚拟机是luajit,它甚至不做类型推断、常量折叠、nan标记和整数,但使用类似的小代码和数据结构,不像糟糕的语言那么胖。 我的原型动态语言,potion和p2有和luajit相似的特性,并且性能优于v8。有了可选的类型系统,“渐变类型”,你可以很容易地超越v8,因为你可以绕过曲轴。看到飞镖。
已知的优化后端,如pypy或jruby仍然受到各种过度工程技术的影响。
我刚刚遇到了这个问题,还有一个很大的技术原因导致了性能差异,但没有提到。Python有一个非常强大的软件扩展生态系统,但这些扩展大多数是用C或其他低级语言编写的,以提高性能,并与CPython API紧密相关。
有很多众所周知的技术(JIT、现代垃圾收集器等)可以用来加速CPython的实现,但所有这些技术都需要对API进行重大更改,破坏了过程中的大多数扩展。CPython会更快,但是Python吸引人的很多东西(广泛的软件堆栈)将会丢失。举个例子,有一些更快的Python实现,但与CPython相比,它们几乎没有吸引力。