开发者生态
morning
宣布 Rust 1.96
2026-05-28
1 阅读
adamch
2026 年 5 月 28 日 · Rust 发布团队 Rust 团队很高兴地宣布推出 Rust 的新版本 1.96.0。 Rust 是一种编程语言,使每个人都能够构建可靠且高效的软件。如果您通过 rustup 安装了以前版本的 Rust,则可以通过以下方式获取 1.96.0: $ rustup update stable 如果您还没有,可以从我们网站上的相应页面获取 rustup,并查看 1.96.0 的详细发行说明。如果您想通过测试未来的版本来帮助我们,您可以考虑在本地更新以使用 beta 通道 ( rustup default beta ) 或 nightly 通道 ( rustup default nightly )。请报告您可能遇到的任何错误! 1.96.0 稳定版中的内容 新 Range* 类型 许多用户期望 Range 和相关的 core::ops 类型是 Copy ,但事实并非如此:他们直接实现 Iterator ,并且在同一类型上实现 Iterator 和 Copy 是一个脚枪,因此已经避免了这种情况。 RFC3550 提出了一组实现 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::* 作为当前范围的新家。像 0..1 这样的范围语法目前仍然会生成旧类型,但将在未来版本中更新为 core::range 类型。有了这些稳定性,现在可以将切片访问器存储在 Copy 类型中,而无需拆分 start 和 end :使用 core :: range :: Range ; # [ 派生 ( 克隆 , 复制 ) ] pub struct Span ( Range < usize > ) ; impl Span { pub fn of ( self , s : & str ) -> & str { & s [ self . 0 ] } } 新的 RangeInclusive 还将其字段公开,这与避免暴露耗尽的迭代器状态的旧版本不同。这与新类型无关,因为必须转换它才能开始迭代。库作者应该考虑在公共 API 中使用 impl RangeBounds,它接受旧的和新的范围类型。如果需要具体类型,最好使用新范围,因为这最终将成为默认值。断言匹配模式 新宏assert_matches!和 debug_assert_matches!检查一个值是否与给定的模式匹配,否则会使用该值的调试表示来恐慌。它们本质上与 assert!(matches!(..)) 和 debug_assert!(matches!(..)) 相同,但打印的值提高了诊断故障的可能性。这些新宏尚未添加到标准 prelude 中,因为它们会与提供同名宏的流行第三方 crate 发生冲突。相反,应在使用前从 core 或 std 手动导入它们。使用 core::assert_matches ; /// [随机数](https://xkcd.com/221/) fn get_random_number ( ) -> u32 { // 通过公平掷骰子选择。 // 保证是随机的。 4 } fn main ( ) { 断言_匹配! ( get_random_number ( ) , 1 ..= 6 ) ;对 WebAssembly 目标的更改 WebAssembly 目标不再将 --allow-undefined 传递给链接器,这意味着链接时未定义的符号现在是链接器错误,而不是转换为从“env”模块导入的 WebAssembly。此更改会阻止模块链接,除非定义所有与链接相关的符号以尽早捕获错误并防止符号命名或类似问题出现意外问题。未定义的链接相关符号通常表示构建时相关的错误或配置错误。但是,如果需要旧行为,则可以使用 RUSTFLAGS=-Clink-arg=--allow-undefined 重新启用它,或者通过编辑源代码并在定义符号的块上使用 #[link(wasm_import_module = "env")] 来重新启用它。此更改之前已在此博客上宣布,现已在 Rust 1.96 中生效。稳定的 API 断言_匹配!调试断言匹配! From for AssertUnwindSafe From for LazyCell From for LazyLock core::range::RangeToInclusive core::range::RangeToInclusiveIter core::range::RangeFrom core::range::RangeFromIter core::range::Range core::range::RangeIter 两个 Cargo 建议 Rust 1.96 包含针对第三方注册表用户的两个漏洞的修复。 CVE-2026-5223 是一个中等严重性漏洞,涉及提取带有符号链接的 crate tarball。 CVE-2026-5222 是一个与规范化 URL 身份验证有关的低严重性漏洞。 crates.io 的用户不受这两个漏洞的影响。其他更改 查看 Rust 、 Cargo 和 Clippy 中的所有更改。 1.96.0 的贡献者 许多人齐心协力创建了 Rust 1.96.0。没有你们所有人,我们不可能做到这一点。谢谢!