主要观点:自去年 3 月关于 Rust 编译器性能更新以来一年多,介绍了 Rust 编译器性能的多项改进及相关情况。
关键信息:
- 多项 PR 带来性能提升,如使用 lld 作为默认链接器、启用 PGO、升级 LLVM 版本、改变单态化工作方式、简化
slice::Iter::next
等,均使编译时间等指标有所降低。 - 启动方面也有改进,如在
rustc_driver
中使用受保护可见性符号等,减少启动时的指令数。 - 2024 - 03 - 04 至 2025 - 03 - 17 期间,整体性能有一定提升,包括编译时间减少、峰值内存使用略有增加、二进制大小变化不大等。
- 作者今年希望致力于前端的增量编译和并行性以提升性能,且不久将更新 rustc - perf 基准测试套件。
重要细节: - [#124129]中 Remy Rakic 使 lld 成为 x86 - 64/Linux 夜间编译器的默认链接器,降低了多个基准测试的时间 30%或更多。
- [#133807]中 Kajetan Puchalski 为 ARM64/Linux 启用了 PGO,使该平台上的大多数基准测试提速 10 - 20%。
- [#127513]和[#135763]中 Nikita Popov 分别将编译器使用的 LLVM 版本升级到 LLVM 19 和 LLVM 20,使所有基准测试的平均墙时减少 1.33%和 0.78%。
- [#132566]中 Ben Kimock 改变了单态化的工作方式,使所有基准测试的平均墙时减少 5.00%,部分超过 20%。
- [#136771]中 scottmcm 简化
slice::Iter::next
使其可内联,使所有基准测试的平均周期减少 0.34%。 - [#133793]中通过改变符号向量类型减少了语法错误生成的性能成本,在许多基准测试中获得 icount 胜利,最佳为 2.5%。
- [#131481]中通过删除一个实际为悲观化的优化,使几个基准测试的指令计数减少不到 1%,代码缩短 500 多行。
- [#131634]中 David Lattimore 在构建
rustc_driver
时使用受保护可见性符号,在 Linux 上减少约 10 - 1200 万条指令的启动时间,对于“hello world”的检查构建,icount 减少 31%。 - [#137586]中消除了对每个特性的第二次检查,在最佳情况下使 icount 减少近 10%,该收益在 x86 和 x86 - 64 上的所有操作系统中都应可见,在其他架构上较小。
- [LLVM #130936]中 Nikita Popov 对 LLVM 中的次优特性检查进行了相关更改,下次 LLVM 主要更新时“hello world”将再获得约 10%的 icount 胜利,且
SetImpliedBits
将不再影响短运行编译器调用的 Cachegrind 配置文件。 - 整体性能测量在 Linux 上进行,编译时间平均减少 6.37%,峰值内存使用平均增加 2.87%,二进制大小平均减少 1.95%,多数变化在个位数。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。