Rust 1.94.0 稳定版已正式发布,主要带来以下变化:
Array windows
Rust 1.94 引入了array_windows,这是针对 slices 的一种迭代操作。它的工作原理与 windows 相同,但长度固定,因此迭代器返回的是&[T; N]而非动态变化的&[T]。在许多情况下,窗口长度甚至能根据迭代器的使用方式被推断出来。
例如,2016 年 Advent of Code 的一个谜题要求寻找 ABBA 模式:“两个不同字符后跟该字符对的逆序组合,例如xyyx或abba”。如果我们只考虑 ASCII 字符,可以通过扫描 byte slice 中的窗口实现:
fn has_abba(s: &str) -> bool {
s.as_bytes()
.array_windows()
.any(*[a1, b1, b2, a2]* (a1 != b1) && (a1 == a2) && (b1 == b2))
}
该闭包中的解构参数模式让编译器能够推断出我们这里需要的是 4 个元素的 windows。如果我们使用旧的.windows(4)迭代器,那么该参数将是一个 slice,需要手动为其建立索引,并寄希望于 runtime bounds-checking 能够被优化掉。
Cargo config inclusion
Cargo 现已在配置文件(.cargo/config.toml)中支持includekey,从而能够更好地跨项目和环境组织、共享和管理 Cargo 配置。这些包含的路径还可标记为optional,以防某些情况下(例如,取决于本地开发人员的选择)路径可能不存在。
# array of paths
include = [
"frodo.toml",
"samwise.toml",
]
# inline tables for more control
include = [
{ path = "required.toml" },
{ path = "optional.toml", optional = true },
]
更多详情可参阅完整include文档。
Cargo 对 TOML 1.1 的支持
Cargo 现在可以解析 TOML v1.1 版本的清单文件和配置文件。详情可参阅 TOML 版本说明。
例如,像这样的依赖关系:
serde = { version = "1.0", features = ["derive"] }
现在可以这样写:
serde = {
version = "1.0",
features = ["derive"],
}
注意,在Cargo.toml中使用这些功能会将你的开发环境最低支持的 Rust 版本 (MSRV) 提升到需要新的 Cargo 解析器。此外,读取清单的第三方工具也可能需要更新其解析器。不过,Cargo 在发布时会自动重写清单以保持与旧版解析器的兼容性,因此你仍然可以为你的 crate 用户提供对早期 MSRV 版本的支持。
Stabilized APIs
这些先前稳定的 API 现在在 const 上下文中也保持稳定:
更多详情可查看官方公告:https://blog.rust-lang.org/2026/03/05/Rust-1.94.0/