Rust 1.94 炸裂更新:滑动窗口模式匹配让代码优雅到起飞

Table of Contents
你有没有遇到过这种情况?写个字符串处理函数,为了取窗口里的四个字节,又是下标访问,又是边界检查,写到最后自己都看不懂自己写了啥。
我之前就是这样的,直到我看到了 Rust 1.94。
滑动窗口直接"拆快递"
3 月 5 号发布的 Rust 1.94,给我们带来了一个超级好用的新玩具:array_windows()。
以前你想检查一个字符串里有没有"ABBA"这种回文模式,得这么写:
fn has_abba_old(s: &str) -> bool {
s.as_bytes()
.windows(4)
.any(|w| w[0] != w[1] && w[0] == w[3] && w[1] == w[2])
}
看到 w[0]、w[1]、w[2]、w[3] 是不是有点晕?这还算短的,复杂场景下你能写出一排 w[n]。
现在有了 array_windows(),世界清净了:
fn has_abba(s: &str) -> bool {
s.as_bytes()
.array_windows()
.any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))
}
编译器会自动推断窗口大小——你只需要在闭包里写出想要几个变量,它就给你拆成几个。[a1, b1, b2, a2] 这种写法,四个变量名写得明明白白,比 w[0]、w[1] 这种神秘数字友好一百倍。

而且因为是固定大小的数组,编译器能直接做边界检查优化,代码既安全又漂亮。
这功能对刷算法题的人来说太友好了。滑动窗口相关的题目在 LeetCode 和 Advent of Code 里特别多,以前要折腾半天的下标操作,现在一行就搞定。
Cargo.toml 终于可以"换行"了
第二个更新可能影响面更广:TOML 1.1 来了。
以前 Cargo.toml 里的内联表必须挤在一行里,像这样:
serde = { version = "1.0", features = ["derive"] }
一个依赖字段多的话,那一行能写到天上去。
现在好了,TOML 1.1 支持多行内联表:
contact = {
personal = {
name = "Donald Duck",
email = "donald@duckburg.com",
},
work = {
name = "Coin cleaner",
email = "donald@ScroogeCorp.com",
},
}
舒服了。
不过有个坑要提醒一下:如果你在项目里用上 TOML 1.1 的新语法,那你的 MSRV(最低支持的 Rust 版本)就直接变成 1.94 了。这意味着帮你修 bug 的贡献者们也得升级 Rust。当然,发布到 crates.io 的时候 Cargo 会自动帮你转成兼容旧版的格式,用户不受影响,但开发团队内部得同步升级。
十年等待:黄金分割率终于来了
最后这个更新虽然不起眼,但真的等了好久。
Rust 标准库之前就有 PI、E、TAU 这些数学常量,但 GOLDEN_RATIO(φ ≈ 1.6180)和 EULER_GAMMA(γ ≈ 0.5772)愣是等了十年才加进来。
use std::f64::consts::{GOLDEN_RATIO, EULER_GAMMA};
println!("φ = {}", GOLDEN_RATIO); // 1.618033988749895
println!("γ = {}", EULER_GAMMA); // 0.5772156649015329
这两个常数有多经典不用我多说了吧。黄金分割在斐波那契数列、螺旋图案、UI 布局里到处可见;欧拉-马歇罗尼常数在数论和概率分布里是常客。之前想用还得自己定义或者拉个第三方库,现在终于圆满了。
还有啥值得关注的
简单提几个其他更新:
- trait 的
dead_codelint 现在会继承到实现上 - 29 个 RISC-V 目标特性稳了,包括 RVA22U64/RVA23U64 的大部分功能
- Unicode 17 支持
LazyCell和LazyLock多了get、get_mut、force_mut方法
怎么更新
一行命令的事:
rustup update stable
然后 rustc --version 确认一下是 1.94.0 就 OK 了。
总结
Rust 1.94 这三个更新虽然不算"炸裂",但都很实用。滑动窗口解构让代码更易读,TOML 多行表让配置文件终于能看,数学常量则补上了标准库的缺口。升级不亏,赶紧整起来。
顺便分享一个我常用的 AI自媒体运营工具 ,覆盖内容排版、素材处理和效率提效。
最近在玩 Claude Code 的新功能,发现官方出了个 Codex 增强版门户 ,把各种智能编程能力整合在一起了。
如果你想看到更多这类工具测评,欢迎关注我的公众号「梦兽编程」,每周更新。
FAQ
Q: array_windows 和 windows 有什么区别?
A: windows(4) 返回的是 &[T],需要用下标访问;array_windows() 返回的是 &[T; N],可以直接解构成 [a, b, c, d] 这种命名变量。编译器还能根据你的解构模式自动推断窗口大小,代码更安全。
Q: 使用 TOML 1.1 新特性有什么风险?
A: 主要风险是提高了项目的 MSRV。如果你的项目依赖第三方库,而它们还没升级到 Rust 1.94,就可能出问题。建议评估后再开启新语法。
Q: GOLDEN_RATIO 和 EULER_GAMMA 有什么用?
A: GOLDEN_RATIO 常用于 UI 设计、图像处理、斐波那契数列相关计算;EULER_GAMMA 主要用在数论、概率论和调和级数分析中。普通业务代码很少直接用到,但做底层计算或科学计算时很方便。
