# Rust 1.94.0:array_windows 稳定化、配置中的 include 以及转向 TOML 1.1
Rust 1.94.0 已发布,为开发者带来了多项重大改进。主要新功能包括用于固定长度数组迭代的 array_windows 方法、在 Cargo 配置文件中支持 include 键,以及切换到 TOML 1.1。这些变化将简化您的工作流程。
array_windows 方法:处理固定长度窗口
在 Rust 新版本中,切片(slice)的 array_windows 方法已正式稳定。它允许使用固定长度窗口迭代切片,无需手动处理索引和边界检查。与返回动态长度切片(&[T])的 windows 方法不同,array_windows 返回固定长度数组的引用(&[T; N])。
这在需要处理已知窗口大小的连续元素时特别实用。例如,要在字符串中查找 ABBA 模式(两个不同字母后跟它们的逆序),可以使用以下代码:
fn has_abba(s: &str) -> bool {
s.as_bytes()
.array_windows()
.any(|[a1, b1, b2, a2]| (a1 != b1) && (a1 == a2) && (b1 == b2))
}
编译器会自动从闭包的解构模式推断窗口长度(4)。如果使用 windows(4),则需要手动检查索引,这既不安全也不易读。
使用 include 键管理 Cargo 配置
Cargo 现在在配置文件(.cargo/config.toml)中支持 include 键。这一功能简化了跨项目和环境的配置组织、共享与管理。
include 键可以是路径数组,或带有额外选项的内联表。例如:
# 路径数组
include = [
"frodo.toml",
"samwise.toml",
]
# 用于微调的内联表
include = [
{ path = "required.toml" },
{ path = "optional.toml", optional = true },
]
optional = true 选项允许指定某些环境(例如开发者的本地机器)中文件可能不存在,从而提升配置灵活性,而无需创建单独的分支。
切换到 TOML 1.1:主要变化
Cargo 现在完全支持清单和配置文件中的 TOML 1.1,带来了多项便利改进:
- 内联表可以使用尾随逗号跨多行展开。
- 字符串支持新转义序列:
\xHH和\e。 - 时间表示中可选的秒部分(默认:0)。
多行内联表示例:
serde = {
version = "1.0",
features = ["derive"],
}
注意: 在 Cargo.toml 中使用 TOML 1.1 新功能,会将最低支持的 Rust 版本(MSRV)提升到需要新 Cargo 解析器的版本。不过,在发布 crate 时,Cargo 会自动将清单重写为与旧解析器兼容的格式,从而为您的 crate 用户保留对早期 Rust 版本的支持。
稳定化的 API:完整列表
1.94.0 版本稳定了许多之前处于开发阶段的 API。以下是主要内容:
- 切片方法:
<[T]>::array_windows、<[T]>::element_offset LazyCell方法:get、get_mut、force_mutLazyLock方法:get、get_mut、force_mut- 转换:
impl TryFrom<char> for usize Peekable方法:next_if_map、next_if_map_mut- x86(AVX-512 FP16)和 AArch64(NEON FP16)的内部函数(不包括依赖不稳定
f16类型的函数) - 数学常数:
f32::consts::EULER_GAMMA、f64::consts::EULER_GAMMA、f32::consts::GOLDEN_RATIO、f64::consts::GOLDEN_RATIO f32::mul_add和f64::mul_add方法现在在const上下文中稳定
这些变化扩展了标准库的能力,让代码更具表现力。
开发者要点
- 简化窗口处理:
array_windows方法减少了固定窗口处理的样板代码,提升了安全性和可读性。 - 配置灵活性:Cargo 中的
include键支持模块化配置组装,特别适合大型项目和团队。 - TOML 1.1 兼容:新 TOML 功能让配置文件更便捷,但使用时需注意
Cargo.toml中的 MSRV。 - 标准库扩展:稳定新 API(包括数学常数和迭代器方法)简化了日常开发任务。
推荐所有开发者更新到 Rust 1.94.0 以充分利用这些改进。使用命令 rustup update stable 安装。
— Editorial Team
暂无评论。