为什么PyPy不包含在标准Python中?

问题:

我正在看PyPy,我只是想知道为什么它没有被采纳到主线Python发行版中。 JIT编译和内存占用空间不会大大提高所有Python代码的速度吗?
简而言之,PyPy的主要缺点是什么导致它仍然是一个单独的项目?

回答:

PyPy不是CPython的分支,所以它永远不会被直接合并到CPython中。
理论上,Python社区可以普遍采用PyPy,PyPy可以作为参考实现,而CPython可以停止。然而,PyPy有自己的弱点:

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

PyPy是一个伟大的项目,但是CPU密集型任务的运行速度并不是一切,在许多应用中,它是许多问题中最少的一个。例如,Django可以运行在PyPy上,使得模板更快,但CPython的数据库驱动程序比PyPy更快;最终,哪个实现更有效率取决于给定应用程序的瓶颈在哪里。
另一个例子:你会认为PyPy对于游戏来说是非常棒的,但像PyPy中使用的大多数GC策略会引起明显的抖动。对于CPython,大多数CPU密集型游戏内容都被卸载到PyGame库中,PyPy不能利用PyGame,因为PyGame主要实现为C扩展(尽管参见:pygame-cffi)。我仍然认为PyPy可以成为一个伟大的游戏平台,但我从未见过它实际使用。
PyPy和CPython具有完全不同的基本设计问题的方法,并做出不同的权衡,所以在每一种情况下都不会比其他的“更好”。

 
 Code问答: codewenda.com
Stackoverflow:Why wasn’t PyPy included in standard Python?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

43 + = 50