gpt4 book ai didi

python - PyPy——它怎么可能打败 CPython?

转载 作者:IT老高 更新时间:2023-10-28 12:10:37 25 4
gpt4 key购买 nike

来自Google Open Source Blog :

PyPy is a reimplementation of Python in Python, using advanced techniques to try to attain better performance than CPython. Many years of hard work have finally paid off. Our speed results often beat CPython, ranging from being slightly slower, to speedups of up to 2x on real application code, to speedups of up to 10x on small benchmarks.

这怎么可能?使用哪个 Python 实现来实现 PyPy? CPython ? PyPyPy 或 PyPyPyPy 击败他们的分数的机会有多大?

(在相关说明中......为什么有人会尝试这样的事情?)

最佳答案

“PyPy 是 Python 中 Python 的重新实现”是一种相当误导性的描述 PyPy 的方式,恕我直言,尽管它在技术上是正确的。

PyPy 有两个主要部分。

  1. 翻译框架
  2. 口译员

翻译框架是一个编译器。它将 RPython 代码编译为 C(或其他目标),自动添加垃圾收集和 JIT 编译器等方面。它不能处理任意 Python 代码,只能处理 RPython。

RPython 是普通 Python 的一个子集;所有 RPython 代码都是 Python 代码,但不是相反。 RPython 没有正式的定义,因为 RPython 基本上只是“可以被 PyPy 的翻译框架翻译的 Python 的子集”。但是为了被翻译,RPython 代码必须是静态类型的(类型是推断出来的,你不需要声明它们,但它仍然是每个变量严格的一种类型),你不能这样做诸如在运行时声明/修改函数/类之类的事情。

解释器是一个用 RPython 编写的普通 Python 解释器。

因为 RPython 代码是普通的 Python 代码,所以您可以在任何 Python 解释器上运行它。但是 PyPy 的速度声明都不是来自于以这种方式运行。这只是为了快速测试周期,因为翻译解释器需要很长时间。

了解了这一点后,关于 PyPyPy 或 PyPyPyPy 的猜测实际上没有任何意义应该是显而易见的。你有一个用 RPython 编写的解释器。你把它翻译成可以快速执行 Python 的 C 代码。过程在那里停止;没有更多的 RPython 可以通过再次处理来加速。

所以“PyPy 怎么可能比 CPython 更快”也变得相当明显。 PyPy 有一个更好的实现,包括一个 JIT 编译器(我相信,如果没有 JIT 编译器,它通常不会那么快,这意味着 PyPy 只对易受 JIT 编译影响的程序更快)。 CPython 从未被设计为 Python 语言的高度优化实现(尽管他们确实试图使其成为高度优化的实现,如果你遵循差异的话)。


PyPy 项目的真正创新之处在于,他们无需手动编写复杂的 GC 方案或 JIT 编译器。他们在 RPython 中相对简单地编写解释器,并且对于所有 RPython 比 Python 低级,它仍然是一种面向对象的垃圾收集语言,比 C 高级得多。然后翻译框架自动添加了类似的东西GC 和 JIT。因此,翻译框架是一项巨大的工作,但它同样适用于 PyPy python 解释器,但它们改变了它们的实现,允许在实验中更自由地提高性能(不用担心引入 GC 错误或更新 JIT 编译器以应对变化)。这也意味着当他们开始实现 Python3 解释器时,它会自动获得相同的好处。以及使用 PyPy 框架编写的任何其他解释器(其中有许多处于不同的抛光阶段)。并且所有使用 PyPy 框架的解释器都会自动支持框架支持的所有平台。

因此,PyPy 项目的真正好处是(尽可能地)分离出为动态语言实现高效的平台无关解释器的所有部分。然后在一个地方提出一个很好的实现,可以在许多解释器中重复使用。这不是像“我的 Python 程序现在运行得更快”那样的立竿见影的胜利,而是对 future 的美好前景。

而且它可以更快地运行你的 Python 程序(也许)。

关于python - PyPy——它怎么可能打败 CPython?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2591879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com