我在看PyPy http://pypy.org/我只是想知道为什么它没有被主流 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 非常适合游戏,但大多数 GC 策略(例如 PyPy 中使用的策略)会导致明显的抖动。对于 CPython,大多数 CPU 密集型游戏内容都被卸载到 PyGame 库,PyPy 无法利用该库,因为 PyGame 主要作为 C 扩展实现(尽管请参阅:pygame-cffi)。我仍然认为 PyPy 可以成为一个很棒的游戏平台,但我从未见过它实际使用。
PyPy 和 CPython 对基本设计问题采用截然不同的方法,并做出不同的权衡,因此在每种情况下,两者都不比另一个“更好”。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)