PyPy —如何击败CPython?

PyPy —如何击败CPython?,第1张

PyPy —如何击败CPython?

Q1。 这怎么可能?

在某些情况下,手动内存管理(这是CPython对其计数的方式)可能比自动管理要慢。

CPython解释器的实现局限性排除了PyPy可以进行的某些优化(例如,细粒度的锁)。

正如Marcelo所述,JIT。能够即时确认对象的类型可以节省您进行多个指针取消引用的 *** 作,以最终到达您要调用的方法。

Q2。 哪个Python实现用于实现PyPy?

PyPy解释器在RPython中实现,RPython是Python的静态类型子集(该语言而不是CPython解释器)。-有关详细信息,请参阅https://pypy.readthedocs.org/en/latest/architecture.html。

Q3。 PyPyPy或PyPyPyPy击败他们的分数的机会是什么?

那将取决于这些假设解释器的实现。例如,如果其中一个拿到了源代码,对其进行了某种分析,并在运行了一段时间后将其直接转换为目标紧密的特定汇编代码,我想它会比CPython快得多。

更新: 最近,在一个精心设计的示例中,PyPy优于使用编译的类似C程序

gcc-O3
。这是一个人为的案例,但确实体现了一些想法。

Q4。 为什么有人会尝试这样的事情?

从官方网站。https://pypy.readthedocs.org/zh_CN/latest/architecture.html#mission-
statement

我们旨在提供:

  • 一个通用的翻译和支持框架,用于生成
    动态语言的实现,强调
    在语言规范和实现
    方面之间的明确区分。我们称此为

    RPython toolchain
    _。

  • Python_语言的合规,灵活和快速实现,该语言使用上述工具链来启用新的高级高级功能,而不必对低级细节进行编码。

通过以这种方式分离关注点,我们的Python和其他动态语言的实现能够为任何动态语言自动生成即时编译器。它还允许采用混合匹配的方法来实施决策,包括许多历史上在用户控制范围之外的决策,例如目标平台,内存和线程模型,垃圾回收策略以及所应用的优化,包括是否具有首先是JIT。

C编译器gcc用C实现,Haskell编译器GHC用Haskell编写。您是否有理由不使用Python编写Python解释器/编译器?



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5645169.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存