我正在查看PyPy,我只是想知道为什么它没有被采用到主线Python发行版中。像JIT编译和更低的内存占用空间不会大大提高所有Python代码的速度吗?
简而言之,PyPy的主要缺点是什么导致它仍然是一个单独的项目?
答案 0 :(得分:242)
PyPy不是CPython的分支,所以它永远不能直接合并到CPython中。
理论上,Python社区可以普遍采用PyPy,PyPy可以作为参考实现,CPython可以停止使用。然而,PyPy有其自身的弱点:
PyPy是一个很棒的项目,但CPU密集型任务的运行时速度并非一切,而且在许多应用程序中,它是许多问题中最不重要的。例如,Django可以在PyPy上运行,这使得模板更快,但CPython的数据库驱动程序比PyPy更快;最后,哪种实现更有效取决于给定应用程序中的瓶颈所在。
另一个例子:你认为PyPy对于游戏来说会很棒,但是像PyPy中使用的大多数GC策略都会引起明显的抖动。对于CPython,大多数CPU密集型游戏内容被卸载到PyGame库,PyPy无法利用它,因为PyGame主要是作为C扩展实现的(尽管参见:pygame-cffi)。我仍然认为PyPy可以成为一个很好的游戏平台,但我从未见过它实际使用过。
PyPy和CPython对基本设计问题的方法截然不同,并做出不同的权衡,因此在任何情况下都不会比其他人“更好”。答案 1 :(得分:62)
首先,使用Python 2.x为not 100% compatible,而对于3.x只有preliminary support。
它也不是可以合并的东西 - PyPy提供的Python实现是使用他们创建的框架生成的,这非常酷,但与现有的CPython实现完全不同。它必须是一个完全替代。
PyPy和CPython之间有一些very concrete differences,一个很重要的是如何支持extension modules - 如果你想要超越标准库,这是一个大问题。
值得注意的是,PyPy的普及速度并不快。
答案 2 :(得分:51)
见this video by Guido van Rossum。他谈到了你在12分33秒时提出的同样问题。
亮点:
毕竟,他是决定......
的人答案 3 :(得分:14)
根据PyPy网站,其中一个原因可能是它目前仅在32位和64位Intel x86架构上运行,而CPython也在其他平台上运行。这可能是由于PyPy中特定于平台的速度增强。虽然速度是一件好事,但人们通常希望语言实现尽可能“与平台无关”。
答案 4 :(得分:7)
我建议David Beazley观看此主题演讲,以获得更多见解。它通过明确自然和安全来回答你的问题。 PyPy的错综复杂。
答案 5 :(得分:6)
除了这里所说的一切之外,PyPy在错误方面并不像CPython那样坚如磐石。使用SymPy,我们在过去的几年中发现了PyPy中的大约12个错误,包括发布版本和夜晚版本。
另一方面,我们只在CPython中发现了一个错误,那是在预发布中。
另外,不要忽视缺乏Python 3支持。核心Python社区中没有人甚至更关心Python 2。他们正在研究Python 3.4中的下一个重大事件,这将是Python 3的第五个主要版本.PyPy的人还没有得到其中一个。所以在他们开始成为竞争者之前,他们已经有了一些赶超的事情。
别误会我的意思。 PyPy太棒了。但它在很多非常重要的方面仍然远远不比CPython好。
顺便说一句,如果你在PyPy中使用SymPy,你将看不到更小的内存占用(或者加速)。请参阅https://bitbucket.org/pypy/pypy/issues/1447/。