python - 为什么 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 主要是作为 C 扩展实现的(尽管参见:pygame-cffi)。我仍然认为 PyPy 可以成为一个很棒的游戏平台,但我从未见过它被实际使用过。

PyPy 和 CPython 对基本设计问题有完全不同的方法并做出不同的权衡,因此在每种情况下,任何一种都不比另一种“更好”。

https://stackoverflow.com/questions/12867263/

相关文章:

c - unix域套接字VS命名管道?

python - 如何从字符串中删除所有空格

python - 如何在 Python 中将新行附加到旧的 CSV 文件?

python - 为 Python 项目添加 .gitignore 文件的最佳实践?

linux - 命令行中的处理器/内核数

linux - 在 Linux 的沙箱中运行不受信任的 C 程序,阻止它打开文件、 fork 等?

python - 使用 Python 解析 HTML

python - 将多个函数应用于多个 groupby 列

linux - 在 shell 中获取文件大小(以字节为单位)的可移植方法

python - 计算两个 Python 字典中包含的键的差异