用于 Python 的尾调用解释器(及其他更新)

主要观点:四年多前发表关于通过尾调用和musttail属性编写快速解释器的技术文章,该技术适用于多种解析器和虚拟机解释器,之后有诸多发展。
关键信息

  • 肯·金在 Python 中实现尾调用解释器并经 PR 审核后合并,有望成为 Python 3.14 默认解释器,但需配置启用。
  • 徐浩发表关于 LuaJIT Remake 的相关文章和论文,其解释器比 LuaJIT 2.1 有 31%性能优势,Deegen 针对 LLVM IR 而非 C 或 C++,指出 C 和 C++在尾调用解释器上的性能限制。
  • GCC 于 2024 年 7 月添加对 C 和 C++的musttail属性支持。
  • 有将保证尾调用添加到 C 标准作为return goto的提案,但提案初衷并非针对尾调用解释器使用场景,且对调用者和被调用者的参数类型匹配要求比[[clang::musttail]]更宽松。
  • clang[[clang::musttail]]因要求调用者和被调用者原型匹配导致一些问题,用户提出两种可能的解决方案,倾向于放松规则。
  • Clang 解决了原文章中尾调用技术导致坏代码的问题,有preserve_nonepreserve_most两种调用约定,preserve_none可消除多余的序言和尾声,preserve_most可优化非尾调用位置的函数,但有局限性。
    重要细节
  • Python 尾调用解释器性能提升及需配置启用情况。
  • LuaJIT Remake 的实验性及与 Deegen 的关系。
  • GCC 添加musttail属性的具体情况及与 Clang 的差异。
  • return goto提案的相关内容及与[[clang::musttail]]的比较。
  • clang[[clang::musttail]]的问题及用户提出的解决方案。
  • preserve_nonepreserve_most调用约定的特点及应用示例。
阅读 13
0 条评论