Rust 1.91.0 在 1.90.0 的基础上进一步打磨了工程化体验,特别是在 Windows ARM 生态 、裸机与底层开发 以及 Cargo 构建管理上带来了实质性的进步。
以下是 Rust 1.91.0 版本深度解析。
🦀 Rust 1.91.0:Windows ARM 迈入第一梯队与更严谨的指针安全
发布日期: 2025 年 10 月 30 日
官方博客原文: Announcing Rust 1.91.0
一、 综述:此版本的核心价值
如果说 1.90.0 是在"提速",那么 1.91.0 则是在"拓宽"和"加固"。其核心变化可归纳为:
- 平台支持大跃迁:Windows ARM64 终于跻身 Tier 1,意味着开发者可以更放心地在高性能 ARM 笔记本(如搭载 Snapdragon X Elite 的设备)上进行 Rust 开发。
- 安全防护下沉:新增了针对裸指针(Raw Pointers)的静态检测,弥补了借用检查器(Borrow Checker)在不安全代码(Unsafe)边缘的盲区。
- 构建环境的可预测性:Cargo 终于稳定了构建目录配置,这对大型 CI/CD 环境和 monorepo 管理是极大的利好。
二、 核心更新深度解析
1. Windows ARM64 (aarch64-pc-windows-msvc) 晋升 Tier 1
原文参考: aarch64-pc-windows-msvc is now a Tier 1 platform
- 注解: 在 Rust 的平台分级制度中,Tier 1 意味着该目标平台拥有最高的保障:每一次代码合并都会在该平台上运行完整的测试套件,并提供官方预编译二进制包。
- 对开发者的意义: 随着 Windows 阵营全面拥抱 ARM 架构,Rust 的这一更新确保了开发者在 Windows ARM 上能获得与 x86_64 平台完全一致的稳定性与开发体验。
2. 安全增强:新增 dangling_pointers_from_locals Lint
原文参考: Add lint against dangling raw pointers from local variables
虽然 Rust 的借用检查器能防止引用(Reference)悬垂,但在处理原生指针(Raw Pointers)时却无能为力。
-
检测内容: 编译器现在会警告那些将指向局部变量的裸指针返回的行为。
-
示例代码:
Rustfn get_dangling() -> *const i32 { let x = 42; &x as *const i32 // 警告:返回了局部变量的指针,函数结束后该内存即失效 } -
优化点: 这种错误在
unsafe代码中非常隐蔽且致命。1.91.0 的这一 Lint 能在编译阶段捕捉这类逻辑错误,显著降低了底层开发的调试成本。
3. Cargo 生产力:稳定 build.build-dir 配置
原文参考: Cargo: stabilize build.build-dir
在 1.91.0 之前,Cargo 默认将所有构建产物放在项目根目录下的 target 中。
-
新功能: 现在你可以在
.cargo/config.toml中统一配置构建产物的存放位置。 -
如何使用?
TOML[build] build-dir = "/tmp/cargo-cache" # 将产物移出项目目录 -
好处: 1. 避免磁盘空间浪费: 多个项目可以共享同一个构建基准目录,方便清理。
- 提升 CI 效率: 在云端构建时,可以更方便地挂载独立的缓存磁盘。
4. 模式绑定顺序调整
原文参考: Lower pattern bindings in the order they're written
- 解析: 现在模式匹配中的绑定顺序(以及随后的 Drop 顺序)将严格遵循代码书写的从左到右顺序。
- 影响: 这是一个非常细微的语义调整,主要影响那些依赖析构顺序(Drop Order)来实现特定副作用的代码。它让代码的行为更加符合开发者的直觉。
5. 标准库 API 稳定化
本次更新稳定了一系列实用的数字处理和集合操作接口:
- 严格数学运算:
{integer}::strict_rem,strict_pow等。这些方法在溢出时会直接触发 panic,适合对安全性要求极高的金融或加密计算场景。 - 常量上下文增强:
OsString::new()和PathBuf::new()现在可以在const中使用了,这意味着你可以直接在全局常量中初始化路径对象。
三、 总结与建议:开发者该如何应对?
1. 升级建议
- 嵌入式/内核开发者: 强烈建议开启
dangling_pointers_from_locals警告。如果你在项目中大量使用unsafe,请务必运行一次cargo check看看是否有新的警告。 - 工程管理: 如果你的项目很大,可以尝试配置
build.build-dir,将编译产物与源代码彻底分离,这对于保持项目目录整洁和配置 Git 忽略非常有用。
2. 开发者的小贴士
1.91.0 虽然没有引入像 1.90.0 那样大幅提速的 LLD 链接器,但它在语言鲁棒性上的补足(如指针 Lint)同样重要。
小贴士:
如果你在使用 WebAssembly,请注意 1.91.0 升级到了 LLVM 19 ,这改变了
multivalue特性的处理方式,详情请参考官方兼容性说明。
这次 Windows ARM 的 Tier 1 升级是否会让你考虑换一台 ARM 架构的开发本?或者你对新的指针检测有什么看法?欢迎继续交流。