【导语:Rust 1.96.0 正式发布,带来新 Range 类型、断言匹配宏等多项新特性,还有 WebAssembly 目标链接行为变更及 Cargo 安全修复。】
本次 Rust 1.96.0 更新中,最受关注的是新的 Range 类型系列。与以往不同,这些新类型实现的是 `IntoIterator` 而非 `Iterator`,且支持 `Copy` trait。新增类型包括 `core::range::Range`、`core::range::RangeFrom`、`core::range::RangeInclusive` 及其对应的迭代器。
其核心价值在于,开发者能将 slice 访问器存储在支持 `Copy` 的类型中,无需分别存储 `start` 和 `end` 两个字段。如代码示例展示了如何利用新的 `Copy` Range 类型封装一个位置区间,整个结构体可安全复制,避免引用语义困扰。
`assert_matches!` 和 `debug_assert_matches!` 两个宏在经过多个测试周期后正式稳定化。它们用于检查某个值是否匹配给定的模式,在测试和协议验证场景中非常有用。
由于这两个宏需要手动从 `core` 或 `std` 导入,Rust 团队这样设计是为了避免与第三方 crate 可能存在的命名冲突。
对于 WebAssembly 目标平台,Rust 1.96.0 不再默认向链接器传递 `--allow-undefined` 参数。这意味着若代码中存在未定义的符号,链接器将直接报错而非默认忽略。
如果开发者需要恢复旧的行为,可以通过 `RUSTFLAGS=-Clink-arg=--allow-undefined` 来手动启用。
本版本包含两个 Cargo 安全公告,均已在 crates.io 上完成修复,对普通用户不产生影响。CVE-2026-5223(中等严重性)涉及 tarball 解压过程中符号链接的处理问题;CVE-2026-5222(低严重性)则涉及 URL 规范化中的身份验证相关问题。
建议所有使用 Cargo 的开发者通过 `rustup update stable` 尽快完成升级。
编辑观点:Rust 1.96.0 的发布带来了诸多实用新特性和安全修复,有助于提升开发者的开发效率和代码安全性,推动 Rust 在更多领域的应用。