Rust 1.96.0 已正式发布,带来了多项值得关注的新特性和安全修复。

新 Range 类型:可 Copy 的区间抽象
本次更新最引人注目的新特性是新的 Range 类型系列。与以往不同,这些新类型实现的是 IntoIterator 而非 Iterator,且支持 Copy trait。具体新增的类型包括 core::range::Range、core::range::RangeFrom、core::range::RangeInclusive 及其对应的迭代器。
这一设计的核心价值在于:开发者现在可以将 slice 访问器存储在支持 Copy 的类型中,而无需像以前那样分别存储 start 和 end 两个字段。一个典型的应用场景是用于实现代码位置的区间抽象:
use core::range::Range;
#[derive(Clone, Copy)]
pub struct Span(Range<usize>);
impl Span {
pub fn of(self, s: &str) -> &str {
&s[self.0]
}
}
这段代码展示了如何利用新的 Copy Range 类型封装一个位置区间,整个结构体可以安全地复制而不会出现引用语义上的困扰。
断言匹配宏:更便捷的模式验证
assert_matches! 和 debug_assert_matches! 两个宏在经过多个测试周期后正式稳定化。这两个宏用于检查某个值是否匹配给定的模式,在测试和协议验证场景中非常有用。由于这两个宏需要手动从 core 或 std 导入,Rust 团队选择这样的设计是为了避免与第三方 crate 可能存在的命名冲突。
WebAssembly 目标链接行为变更
对于 WebAssembly 目标平台,Rust 1.96.0 不再默认向链接器传递 --allow-undefined 参数。这意味着如果代码中存在未定义的符号,链接器将直接报错而非默认忽略。如果开发者需要恢复旧的行为,可以通过 RUSTFLAGS=-Clink-arg=--allow-undefined 来手动启用。
两个 Cargo 安全修复
本版本还包含两个 Cargo 安全公告,均已在crates.io 上完成修复,对普通用户不产生影响:
- CVE-2026-5223(中等严重性)涉及 tarball 解压过程中符号链接的处理问题;
- CVE-2026-5222(低严重性)则涉及 URL 规范化中的身份验证相关问题。
建议所有使用 Cargo 的开发者通过 rustup update stable 尽快完成升级。
详情查看发布公告:https://blog.rust-lang.org/2026/05/28/Rust-1.96.0