Rust PR:改进 Rust 字符串格式化

我改进了 Rust 中所有字符串格式化宏的实现:println!()、panic!()、format!()、write!()、log::info!() 等等。(也就是说,所有基于 format_args!() 的宏。)改进后的宏编译速度更快,编译时占用内存更少,生成的二进制文件更小,代码效率更高。
“Hello world”程序的编译速度提升了 3%,而像 Ripgrep 和 Cargo 这样的一些大型项目,编译速度也提升了 1.5%到 2%。而且这些二进制文件的大小也缩小了大约 2%。
这项更改已经在 Rust Nightly 版本中推出,并应在 1 月份作为 Rust 1.93.0 的一部分发布。
需要注意的是,也有很多程序进行这种更改后性能几乎没有变化。许多基准测试显示性能提升仅为 0.5% 或 0.1%,甚至根本没有变化。
最极端的例子是 large-workspace 基准测试,这是一个由数百个 crate 生成的基准测试,每个 crate 都只有几个 println!() 语句。现在,它的编译速度提高了 38%,生成的二进制文件体积缩小了 22%。
PR:https://github.com/rust-lang/rust/pull/148789
讨论:https://www.reddit.com/r/rust/comments/1ow210r/improved_string_formatting_in_rust/
Rust Content 视频:采访 Rust for Linux 核心团队成员 Benno
Benno Lossin 与 Tyler Mandry 探讨了他为 Rust 开发字段投影功能 (field projection) 的工作。字段投影允许你将指向结构体的通用指针转换为指向该结构体某个字段的等效指针。
许多指针类型都支持这种模式,包括原始指针、ArcᐸTᐳ、&CellᐸTᐳ、std::cell::RefᐸTᐳ、&mut MaybeUninitᐸTᐳ 和固定引用。我们计划支持自定义指针类型,其应用包括为 C++ 互操作和 Linux 的 RCU(读-复制-更新)同步机制创建别名引用。我们将深入探讨这些用例、设计挑战、语法问题,并讨论开发语言特性的过程。
被采访者:Benno 是 Rust for Linux 核心团队的成员。
采访者:Tyler 是 Rust 语言设计团队的联合负责人。
访谈时间:Kangrejos 2025 (Rust for Linux 每年的内部会议,其网站有公开的 slides)
观看:https://www.youtube.com/watch?v=S5fEF7Rdw28
教程:TypeState 模式
TypeState 模式将状态编码为类型信息。这非常有用,因为这些信息在编写程序时存在,但在运行程序时则不存在。
观看:https://www.youtube.com/watch?v=YPP2uQzdvN8
讨论:用 target-cpu=native 重编译 Rust 编译器能否提升编译速度?
讨论共识认为效果微乎其微,原因如下:
- 瓶颈在内存:编译器主要是内存密集型(Memory Bound)任务,受限于缓存和内存延迟,而非 CPU 指令集。
- SIMD 难利用:编译器逻辑多为图遍历和指针追踪,难以像数学计算那样利用 AVX 等向量指令。
- 更好方案:PGO(基于配置文件的优化)比特定 CPU 优化更能显著提升编译器性能。
- 缺点:生成的二进制文件将失去跨机器的可移植性。
见 https://www.reddit.com/r/rust/comments/1p9hjag/has_anyone_built_rustccargo_with_targetcpunative/
--
From 日报小组 苦瓜小仔
社区学习交流平台订阅:
评论区
写评论还没有评论