文章摘要
Python 3.15针对Windows x86-64平台的解释器性能预计将提升15%,这是开发者在修正了编译器错误后通过实验验证的结果。该优化在MacOS AArch64平台也有5%的性能提升。
文章总结
标题:Python 3.15的Windows x86-64解释器有望提速15%
主要内容:
性能提升
Python 3.15针对Windows x86-64平台的解释器预计将实现15%的性能提升,这一改进基于尾调用(tail-call)技术。在内部测试中,使用实验性MSVC编译器时,尾调用解释器比传统的switch-case解释器在pyperformance基准测试中平均提速15-16%,部分微基准测试(如spectralnorm和nbody)甚至实现了35-48%的显著加速。技术背景
- 传统解释器实现方式包括switch-case和计算跳转(computed goto),而尾调用是第三种方案,通过将每个字节码处理程序作为独立函数并尾调用下一个处理程序来优化性能。
- 尾调用的关键突破是Clang的
__attribute__((musttail))和MSVC的实验性支持,确保编译器必须进行尾调用优化,避免栈溢出风险。
性能提升原因
- 编译器启发式重置:CPython的解释器循环代码量庞大(约12,000行),导致传统实现中编译器拒绝内联简单函数(如
PyStackRef_CLOSE_SPECIALIZED)。尾调用将代码拆分为独立函数,使得编译器能够正常内联,减少函数调用开销。 - 实测数据:在非PGO构建中,尾调用版本成功内联了关键函数,而switch-case版本则未内联,导致性能差异。
- 编译器启发式重置:CPython的解释器循环代码量庞大(约12,000行),导致传统实现中编译器拒绝内联简单函数(如
平台支持
- macOS:已通过XCode Clang实现尾调用,性能提升约5%,uv工具链的Python 3.14版本已部署该优化。
- Windows:依赖MSVC的实验性功能(Visual Studio 2026),需从源码构建。官方计划在Python 3.15的macOS和Windows版本中默认启用尾调用。
注意事项
- MSVC的尾调用支持尚未正式文档化,可能存在变数。
- 目前需通过源码编译体验,命令示例:
powershell $env:PlatformToolset = "v145" ./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
致谢与协作
该改进由Chris Eibl、Ken Jin和Brandt Bucher主导,MSVC团队(包括Hulon Jenkins)提供了关键技术支持,相关PR已合并至CPython代码库。
总结:Python 3.15通过尾调用技术显著提升了Windows平台的解释器性能,核心在于优化编译器内联行为,但需注意其依赖的实验性编译器支持。
评论总结
以下是评论内容的总结:
关于优化Python解释器的建议
- 有评论建议使用AlphaEvolve或其开源版本OpenEvolve来优化Python解释器核心循环。
引用:"The Python interpreter core loop sounds like the perfect problem for AlphaEvolve." - 另一评论质疑为何核心循环尚未高度优化,认为应针对主流ISA使用手写汇编。
引用:"How is the core loop not already hyper optimized? I'd have expected it to be hand rolled assembly."
- 有评论建议使用AlphaEvolve或其开源版本OpenEvolve来优化Python解释器核心循环。
尾调用解释器的性能优势
- 尾调用解释器比computed goto略快,主要原因是避免了大型函数破坏编译器启发式优化(如内联)。
引用:"tail calling resets compiler heuristics to sane levels."
引用:"12k lines in a single function breaks a lot of compiler heuristics."
- 尾调用解释器比computed goto略快,主要原因是避免了大型函数破坏编译器启发式优化(如内联)。
编译器差异与未公开功能
- MSVC生成的代码通常比GCC/Clang慢,但特定技巧(如
[[msvc::musttail]])可能缩小差距。
引用:"MSVC mostly generates slower code than gcc/clang, so maybe this trick reduces the gap." - 评论指出MSVC功能文档不透明,依赖厂商选择性披露。
引用:"Yay to getting undocumented MSVC features disclosed if Microsoft thinks you’re important enough."
- MSVC生成的代码通常比GCC/Clang慢,但特定技巧(如
对性能提升的审慎态度
- 有评论提醒需警惕性能提升数据(如Python 3.14的9-15%实际仅为4%),但肯定作者透明公开的态度。
引用:"Actual gains was aprox 4%... he is 100% transparent with his thinking."
- 有评论提醒需警惕性能提升数据(如Python 3.14的9-15%实际仅为4%),但肯定作者透明公开的态度。
工具与内容请求
- 有用户询问博客的RSS订阅功能。
- 另一用户对文中图表工具感兴趣,并分享自身优化经验。
引用:"How was this generated? What tool was used for the benchmarks?"
总结呈现了技术讨论(优化方法、编译器差异)、数据验证质疑及工具需求等多元观点,引用保留了中英文关键句。