来自谷歌开源博客:
PyPy 是 Python 中 Python 的重新实现,它使用先进的技术来尝试获得比 CPython 更好的性能。多年的努力终于有了回报。我们的速度结果通常优于 CPython,范围从稍微慢一点,到实际应用程序代码的最高加速 2 倍,再到小型基准测试的最高 10 倍加速。
这怎么可能?使用哪个 Python 实现来实现 PyPy?CPython ? PyPyPy 或 PyPyPyPy 击败他们的分数的机会有多大?
(在相关说明中......为什么有人会尝试这样的事情?)
Q1。 这怎么可能?
在某些情况下,手动内存管理(这是 CPython 对其计数所做的)可能比自动管理慢。
CPython 解释器实现的限制排除了 PyPy 可以做的某些优化(例如细粒度锁)。
正如马塞洛所说,JIT。能够即时确认对象的类型可以节省您进行多次指针取消引用以最终到达您想要调用的方法的需要。
Q2。 使用哪个 Python 实现来实现 PyPy?
PyPy 解释器是在 RPython 中实现的,它是 Python 的静态类型子集(语言而不是 CPython 解释器)。- 有关详细信息,请参阅https://pypy.readthedocs.org/en/latest/architecture.html。
Q3。 PyPyPy 或 PyPyPyPy 击败他们的分数的机会有多大?
这将取决于这些假设解释器的实现。例如,如果其中一个获取源代码,对其进行某种分析,并在运行一段时间后直接将其转换为特定目标的汇编代码,我想它会比 CPython 快得多。
更新: 最近,在一个精心设计的示例中,PyPy 的性能优于使用gcc -O3. 这是一个人为的案例,但确实展示了一些想法。
gcc -O3
Q4。 为什么有人会尝试这样的事情?
来自官方网站。https://pypy.readthedocs.org/en/latest/architecture.html#mission- statement
我们的目标是提供: 用于生成动态语言实现的通用翻译和支持框架,强调 语言规范和实现 方面之间 的清晰分离。我们称之为_。 RPython toolchain Python_ 语言的兼容、灵活和快速的实现,它使用上述工具链来启用新的高级高级功能,而无需对低级细节进行编码。 通过以这种方式分离关注点,我们的 Python 和其他动态语言的实现能够为任何动态语言自动生成即时编译器。它还允许对实现决策采用混合搭配的方法,包括许多历史上不受用户控制的决策,例如目标平台、内存和线程模型、垃圾收集策略以及应用的优化,包括是否具有首先是 JIT。
我们的目标是提供:
RPython toolchain
通过以这种方式分离关注点,我们的 Python 和其他动态语言的实现能够为任何动态语言自动生成即时编译器。它还允许对实现决策采用混合搭配的方法,包括许多历史上不受用户控制的决策,例如目标平台、内存和线程模型、垃圾收集策略以及应用的优化,包括是否具有首先是 JIT。
C 编译器 gcc 是用 C 实现的,Haskell 编译器 GHC 是用 Haskell 编写的。你有什么理由不使用 Python 编写 Python 解释器/编译器吗?