主要观点:四年多前发表关于通过尾调用和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_none
和preserve_most
两种调用约定,preserve_none
可消除多余的序言和尾声,preserve_most
可优化非尾调用位置的函数,但有局限性。
重要细节: - Python 尾调用解释器性能提升及需配置启用情况。
- LuaJIT Remake 的实验性及与 Deegen 的关系。
- GCC 添加
musttail
属性的具体情况及与 Clang 的差异。 return goto
提案的相关内容及与[[clang::musttail]]
的比较。clang
中[[clang::musttail]]
的问题及用户提出的解决方案。preserve_none
和preserve_most
调用约定的特点及应用示例。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。