Rust 1.96.0 已于 5 月 28 日正式发布,为这门以内存安全著称的编程语言带来了全新的 Range* 类型。现有用户可通过运行 rustup update stable 命令完成升级。
新 Range* 类型详解
Rust 团队指出,许多用户期望 Range 及相关 core::ops 类型实现 Copy trait,但实际情况并非如此。由于这些类型直接实现了 Iterator,而同时实现 Iterator 和 Copy 会带来潜在的使用陷阱。为此,RFC 3550 提出了一套替代方案:新的 Range 类型改为实现 IntoIterator 而非 Iterator,从而也能够实现 Copy。
标准库中该 RFC 对应的部分现已稳定,正式引入 core::range::Range、core::range::RangeFrom、core::range::RangeInclusive 以及相关迭代器。
后续版本规划
在未来的 Rust 版本中,core::range::RangeFull 和 core::range::RangeTo 将以 core::ops 重导出的形式加入。由于这两种类型不实现 Iterator,且已经实现了 Copy,因此无需做额外处理。
未来版本还将引入 core::range::legacy::* 作为现有 Range 类型的新归属命名空间。目前,0..1 这样的 Range 语法仍然产生旧版类型,但将在即将到来的 Edition 中更新为 core::range 类型。
得益于这些改进,现在无需拆分 start 和 end,即可将切片访问器直接存储在 Copy 类型中。此外,新的 RangeInclusive 类型将字段设为公开,而旧版本为了避免暴露迭代器耗尽状态而刻意隐藏了这些字段。
其他更新内容
Rust 1.96.0 还新增了两个宏:assert_matches! 和 debug_assert_matches!,用于检查某个值是否匹配指定模式,若不匹配则以 Debug 格式输出 panic 信息。
此外,WebAssembly 编译目标不再向链接器传递 --allow-undefined 参数。这意味着链接时遇到未定义符号将直接报错,而不再自动将其转换为来自 "env" 模块的 WebAssembly 导入。该变更有助于更早发现 bug,并防止因符号命名错误等问题引发的意外行为。
Rust 1.96.1 点版本发布
Rust 团队于 6 月 30 日发布了 Rust 1.96.1 点版本,针对 Cargo、MIR 和 libssh2 进行了一系列修复,主要包括:
Cargo HTTP 客户端缺少重试与超时机制的问题
MIR 优化中存在的错误编译问题
安全漏洞修复:CVE-2025-15661、CVE-2026-55199、CVE-2026-55200
Q&A
Q1:Rust 1.96.0 新引入的 Range 类型解决了什么问题?
A:旧版 Range 类型因直接实现 Iterator,导致无法同时实现 Copy trait,给开发者带来使用上的困扰。新版 Range 类型(如 core::range::Range、core::range::RangeFrom、core::range::RangeInclusive)改为实现 IntoIterator,从而可以同时支持 Copy,方便开发者将切片访问器存储在 Copy 类型中,无需手动拆分 start 和 end 字段。
Q2:升级到 Rust 1.96.0 后,原有的 Range 语法(如 0..1)会受影响吗?
A:暂时不会。目前 0..1 这类语法仍然生成旧版 Range 类型,旧类型也将迁移到 core::range::legacy::* 命名空间继续维护。但 Rust 团队计划在未来的 Edition 版本中,将 Range 语法更新为生成新的 core::range 类型,开发者可关注后续版本公告提前做好准备。
Q3:Rust 1.96.1 修复了哪些安全漏洞?
A:Rust 1.96.1 修复了三个安全漏洞,分别是 CVE-2025-15661、CVE-2026-55199 和 CVE-2026-55200,同时还修复了 Cargo HTTP 客户端缺少重试与超时机制的问题,以及 MIR 优化阶段存在的错误编译问题。建议所有用户尽快通过 rustup update stable 升级到最新版本。
