问:如果 PyPy 与 CPython 相比可以解决这些巨大的挑战(速度、内存消耗、并行性),那么它的哪些弱点阻碍了更广泛的采用?
A:首先,几乎没有证据表明 PyPy 团队可以普遍解决速度问题。长期证据表明,PyPy 运行某些 Python 代码比 CPython 慢,而这个缺点似乎深深植根于 PyPy。
其次,在相当多的情况下,当前版本的 PyPy 比 CPython 消耗更多的内存。所以 PyPy 还没有解决内存消耗的问题。
PyPy 是否解决了上述巨大挑战,并且总体上是否会比 CPython 更快、更少内存占用以及对并行性更友好,这是一个短期内无法解决的悬而未决的问题。有些人打赌 PyPy 永远无法提供一个通用的解决方案,使其能够在所有情况下主宰 CPython 2.7 和 3.3。
如果 PyPy 总体上比 CPython 更好(这是值得怀疑的),那么影响其更广泛采用的主要弱点将是它与 CPython 的兼容性。还有一些问题,例如 CPython 可以在更广泛的 CPU 和操作系统上运行,但与 PyPy 的性能和 CPython 兼容性目标相比,这些问题的重要性要小得多。
问:为什么我现在不能用 PyPy 替换 CPython?
答:PyPy 不是 100% 与 CPython 兼容,因为它没有在底层模拟 CPython。一些程序可能仍然依赖于 CPython 的独特特性,而 PyPy 中没有这些特性,例如 C 绑定、Python 对象和方法的 C 实现,或者 CPython 垃圾收集器的增量特性。