为什么PyPy没有被包括在标准Python中?

2024-05-13 01:50:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在看PyPy,我只是想知道为什么主线Python发行版没有采用它。像JIT编译和减少内存占用这样的事情不会极大地提高所有Python代码的速度吗?

简而言之,PyPy的主要缺点是什么,导致它仍然是一个单独的项目?


Tags: 项目内存代码pypy事情主线速度jit
3条回答

首先,它是Python 2.x的not 100% compatible,而对于3.x只有preliminary support

这也不是可以合并的——pypypy提供的Python实现是使用他们创建的框架生成的,非常酷,但也与现有的CPython实现完全不同。它必须是一个完整的替代品。

PyPy和CPython之间有一些very concrete differences,一个很大的问题是如何支持extension modules-如果你想超越标准库,这是一个很大的问题。

同样值得注意的是,PyPy并不是普遍更快的。

PyPy不是CPython的分支,因此它永远不能直接合并到CPython中。

理论上,Python社区可以普遍采用PyPy,PyPy可以作为参考实现,CPython可以停止。然而,PyPy也有自己的弱点:

  • C Python很容易与用C编写的Python模块集成,这是Python应用程序处理CPU密集型任务的传统方式(参见SciPy项目)。
  • PyPy JIT编译步骤本身就要花费CPU时间——只有通过反复运行编译后的代码,它才能总体上变得更快。这意味着启动时间可能更高,因此PyPy在运行粘合代码或琐碎脚本时不一定那么高效。
  • PyPy和CPython的行为在所有方面都不完全相同,特别是在“实现细节”方面(这种行为不是由语言指定的,但在实际应用中仍然很重要)。
  • CPython运行在比PyPy更多的体系结构上,并且已经成功地适应了在嵌入式体系结构中运行的方式,这种方式对于PyPy来说可能是不切实际的。
  • 与PyPy的各种GC系统相比,CPython的内存管理引用计数方案可能具有更可预测的性能影响,尽管这不一定适用于所有的“纯GC”策略。
  • PyPy还没有完全支持Python 3.x,尽管它是一个活动的工作项。

PyPy是一个很好的项目,但是CPU密集型任务的运行速度并不是一切,在许多应用程序中,它是最不重要的。例如,Django可以在PyPy上运行,这使得模板化更快,但是CPython的数据库驱动程序比PyPy的数据库驱动程序更快;最后,哪个实现更高效取决于给定应用程序中的瓶颈在哪里。

另一个例子:您可能认为PyPy对游戏很好,但大多数GC策略(如PyPy中使用的那些策略)会导致明显的抖动。对于CPython,大部分CPU密集型的游戏内容都被卸载到PyGame库中,PyPy无法利用这个库,因为PyGame主要是作为C扩展实现的(尽管参见:PyGame cffi)。我仍然认为PyPy可以成为一个很好的游戏平台,但我从未见过它真正被使用。

PyPy和CPython对于基本设计问题有着截然不同的方法,并且做出了不同的权衡,因此在每种情况下,两者都不是“更好”的。

this video by Guido van Rossum。他说的和你在12分33秒问的问题一样。

亮点:

  • 缺少Python 3兼容性
  • 缺少扩展支持
  • 不适合作为胶码
  • 速度不是一切

毕竟,他是决定。。。

相关问题 更多 >