在某些情况下,手动内存管理(这是cpython对其计数的方式)可能比自动管理要慢。
cpython解释器的实现局限性排除了PyPy可以进行的某些优化(例如,细粒度的锁)。
正如Marcelo所述,JIT。能够即时确认对象的类型可以节省您进行多个指针取消引用的操作,以最终到达您要调用的方法。
PyPy解释器在RPython中实现,RPython是Python的静态类型子集(该语言而不是cpython解释器)。-有关详细信息,请参阅https://pypy.readthedocs.org/en/latest/architecture.html。
那将取决于这些假设解释器的实现。例如,如果其中一个拿到了源代码,对其进行了某种分析,并在运行了一段时间后将其直接转换为目标紧密的特定汇编代码,我想它会比cpython快得多。
最近,在一个精心设计的示例中,PyPy优于使用编译的类似C程序gcc -O3
。这是一个人为的案例,但确实体现了一些想法。
从官方网站。https://pypy.readthedocs.org/zh_CN/latest/architecture.html#mission- statement
我们旨在提供:
一个通用的翻译和支持框架,用于生成 动态语言的实现,强调 在语言规范和实现 方面之间的明确区分。我们称此为RPython toolchain
_。
Python_语言的合规,灵活和快速实现,该语言使用上述工具链来启用新的高级高级功能,而不必对低级细节进行编码。
通过以这种方式分离关注点,我们的Python和其他动态语言的实现能够为任何动态语言自动生成即时编译器。它还允许采用混合匹配的方法来实施决策,包括许多历史上在用户控制范围之外的决策,例如目标平台,内存和线程模型,垃圾回收策略以及所应用的优化,包括是否具有首先是JIT。
C编译器gcc用C实现,Haskell编译器GHC用Haskell编写。您是否有理由不使用Python编写Python解释器/编译器?