Rust 1.95.0 正式发布:核心特性升级与生态完善,一文带你看完整更新
2026年4月16日,Rust 团队正式推出了稳定版 Rust 1.95.0,这是一次聚焦语法简化、API 完善、平台扩展的增量更新,通过多个实用特性降低了开发门槛,尤其对平台适配、并发编程和嵌入式开发场景提供了显著支持。
快速升级方式
如果你已通过 rustup 安装了 Rust 环境,只需执行以下命令即可一键升级到 1.95.0 稳定版:
rustup update stable
核心语言特性更新
cfg_select! 宏正式稳定:替代 cfg-if 的编译期匹配
Rust 1.95.0 正式将 cfg_select! 宏纳入稳定版,该宏相当于针对 cfg 配置的“编译期 match 表达式”,可替代社区广泛使用的 cfg-if 库。
示例一:平台差异化函数实现
cfg_select! {
unix => {
fn foo() {
// Unix 系统专属逻辑(如 Linux、macOS)
println!("Running on Unix-like system");
}
}
target_pointer_width = "32" => {
fn foo() {
// 非 Unix 系统、32位架构专属逻辑
println!("Running on 32-bit non-Unix system");
}
}
_ => {
fn foo() {
// 兜底实现,适配所有未匹配的场景
println!("Running on other systems");
}
}
}
fn main() {
foo();
}
示例二:简洁的配置判断
// 判断当前是否为 Windows 系统,返回对应字符串
let is_windows_str = cfg_select! {
windows => "windows",
_ => "not windows",
};
与 cfg-if 相比,cfg_select! 无需引入外部依赖,语法更贴近 Rust 原生的 match 表达式,降低了跨平台项目开发的平台适配代码的维护成本。
match 表达式支持 if let 守卫:增强模式匹配能力
自 Rust 1.88 稳定 let chains 特性后,1.95.0 进一步将该能力延伸至 match 表达式,支持在 match 分支中使用 if let 守卫,实现更复杂的条件匹配,无需额外嵌套即可处理多层模式校验场景。
示例:嵌套模式匹配简化
// 假设 value 是 Option<String> 类型
match value {
Some(x) if let Ok(y) = x.parse::<i32>() && y > 0 => {
// 同时满足:x 存在、x 可解析为 i32、解析结果大于 0
println!("Valid positive integer: {}", y);
}
Some(x) => {
println!("Invalid integer string: {}", x);
}
None => {
println!("No value provided");
}
}
需要注意的是,当前编译器不会将 if let 守卫中的模式纳入 match 表达式的穷尽性检查,这与普通 if 守卫的行为保持一致,开发者仍需确保覆盖所有可能的分支场景。
标准库 API 稳定
本次更新稳定了一批实用的标准库 API,涵盖内存操作、并发编程、类型转换等场景,进一步丰富了 Rust 原生能力,减少开发者对第三方 crate 的依赖。
MaybeUninit 与 Cell 系列 API 扩展
针对未初始化内存操作(MaybeUninit)和内部可变性(Cell),新增了多个数组相关的方法,简化了批量内存操作的编码:
MaybeUninit<(T; N)>新增from、as_ref、as_mut方法,支持与(MaybeUninit<T>; N)类型的相互转换,适配数组场景的未初始化内存管理;Cell<(T; N)>新增as_ref方法,支持将数组类型的 Cell 转换为对应的 Cell 数组引用,方便批量访问和修改。
这些 API 对嵌入式开发、低级别内存优化场景尤为实用,能在保证内存安全的前提下,提升代码的简洁性和效率。
原子类型 API 增强
原子类型(AtomicPtr、AtomicBool、AtomicI*、AtomicU*)新增 update 和 try_update 方法,简化了原子操作的逻辑,无需手动处理加载、修改、存储的完整流程:
use std::sync::atomic::{AtomicBool, Ordering};
let x = AtomicBool::new(false);
// 使用 update 方法原子化修改值(返回修改后的结果)
assert_eq!(x.update(Ordering::SeqCst, Ordering::SeqCst, |x| !x), false);
assert_eq!(x.update(Ordering::SeqCst, Ordering::SeqCst, |x| !x), true);
assert_eq!(x.load(Ordering::SeqCst), false);
其中,update 方法接收一个闭包用于修改值,全程保证原子性;try_update 则支持返回 Result 类型,可处理修改失败的场景,适配更复杂的并发逻辑。
其他实用 API 稳定
bool::try_from<{integer}>:支持从整数类型安全转换为 bool 类型,非 0 整数转换为 true,0 转换为 false,避免手动判断的冗余代码;- 核心模块扩展:
core::range模块新增RangeInclusive、RangeInclusiveIter,完善范围迭代的原生支持; core::hint::cold_path:用于标记“冷路径”(不常执行的代码),帮助编译器优化代码生成,提升程序运行效率。
编译器与平台支持
编译器优化
本次更新稳定了 --remap-path-scope 参数,该参数支持更精细地控制二进制文件中的路径重映射,有助于提升构建的可复现性和安全审计能力,尤其适合开源项目和企业级应用的构建流程优化。
Tier 2 平台晋升
多个平台正式晋升为 Tier 2 支持级别,官方将提供预编译二进制包和构建支持,覆盖更多应用场景:
| 目标平台 | 主要适用场景 |
|---|---|
| powerpc64-unknown-linux-musl | 嵌入式 Linux、工业控制设备 |
| aarch64-apple-tvos / -sim | Apple TV 应用开发及模拟器调试 |
| aarch64-apple-watchos / -sim | Apple Watch 应用开发及模拟器调试 |
| aarch64-apple-visionos / -sim | Apple Vision Pro 空间计算应用开发 |
这一更新极大地扩展了 Rust 在嵌入式、Apple 生态领域的适配能力,为相关场景的开发者提供了更完善的官方支持。
兼容性注意事项
本次更新总体保持向后兼容,但有一个重要变更需要注意:稳定频道不再支持自定义目标规格(custom target specs),如果是嵌入式开发或针对特殊硬件架构开发的开发者,若依赖自定义目标规格,需切换到 beta 或 nightly 频道继续使用,或适配官方提供的 Tier 2 平台支持。
总结
Rust 1.95.0 是一次务实的版本更新,尤其是正在做 Apple 设备开发、嵌入式项目或重度使用 cfg-if 的开发者,cfg_select! 能直接减少一个外部依赖。