Rust : 新版本 1.91.0 裸指针检测 Lint

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 则是在"拓宽"和"加固"。其核心变化可归纳为:

  1. 平台支持大跃迁:Windows ARM64 终于跻身 Tier 1,意味着开发者可以更放心地在高性能 ARM 笔记本(如搭载 Snapdragon X Elite 的设备)上进行 Rust 开发。
  2. 安全防护下沉:新增了针对裸指针(Raw Pointers)的静态检测,弥补了借用检查器(Borrow Checker)在不安全代码(Unsafe)边缘的盲区。
  3. 构建环境的可预测性: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)时却无能为力。

  • 检测内容: 编译器现在会警告那些将指向局部变量的裸指针返回的行为。

  • 示例代码:

    Rust 复制代码
    fn 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. 避免磁盘空间浪费: 多个项目可以共享同一个构建基准目录,方便清理。

    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 架构的开发本?或者你对新的指针检测有什么看法?欢迎继续交流。

相关推荐
Pomelo_刘金2 小时前
Rust : 新版本 1.93.0 深度解析
后端·rust·编程语言
无籽西瓜a2 小时前
【西瓜带你学设计模式 | 第十九期 - 状态模式】状态模式 —— 状态流转与行为切换实现、优缺点与适用场景
java·后端·设计模式·状态模式·软件工程
Pomelo_刘金2 小时前
Rust:新版本 1.91.1 版本修复解析
后端·rust·编程语言
Pomelo_刘金2 小时前
Rust:新版本 1.92.0 Never 类型更新
后端·rust·编程语言
Pomelo_刘金2 小时前
Rust:新版本 1.94.0 深度解析
后端·rust·编程语言
Pomelo_刘金2 小时前
Rust 1.94.1 版本修复解析
后端·rust·编程语言
浪客川2 小时前
【百例RUST - 015】闭包
开发语言·后端·rust
楼田莉子2 小时前
仿muduo的高并发服务器——前置知识讲解和时间轮模块
服务器·开发语言·c++·后端·学习
小江的记录本2 小时前
【分布式】分布式核心组件——分布式限流:固定窗口、滑动窗口、漏桶、令牌桶算法,网关层/服务层限流实现
java·分布式·后端·python·算法·安全·面试