Rust:新版本 1.91.1 版本修复解析

12 阅读2分钟

Rust 1.91.1:紧急修正 Wasm 链接风险与平台兼容性

发布日期: 2025 年 11 月 10 日 官方博客原文: Announcing Rust 1.91.1

一、 综述:精准修复两大回归(Regressions)

Rust 1.91.1 是一个专门针对 1.91.0 版本引入的两个严重错误而发布的补丁版本。它的任务非常明确:

  1. 挽救 Wasm 运行时的安全性:修复了可能导致“静默数据损坏”或“崩溃”的链接错误。
  2. 恢复 illumos 平台的工程能力:修复了在该操作系统上由于 File::lock 报错导致的 Cargo 无法并行构建的问题。

二、 核心更新深度解析

1. 修复 Wasm 的链接器与运行时错误

原文参考: Wasm linker and runtime errors

这是本次补丁中最关键的安全修复。在 Wasm 环境中,符号是通过“名称”和“模块名”双重识别的。

  • 问题所在: 在 1.91.0 中,#[link(wasm_import_module = "...")] 属性出现回归。当从多个不同的 Rust crate 导入相同的符号名称时,编译器可能会搞混它们所属的模块。

  • 后果: * 链接失败: 报“导入模块不匹配(Import module mismatch)”错误。

    • 致命隐患: 在运行时调用了错误的函数。这会导致未定义行为(UB),包括程序直接崩溃或更可怕的静默数据损坏
  • 修复方案: 1.91.1 修正了该属性的处理逻辑,确保了多模块 Wasm 开发的符号隔离。

  • 详情参考: Issue #148347

2. 修复 illumos 上的 Cargo 构建目录锁定故障

原文参考: Broken Cargo target directory locking on illumos

Cargo 会锁定 target/ 目录以防止多个 Cargo 进程互相踩踏(例如你同时在两个终端跑构建)。

  • 技术背景: Rust 1.89.0 稳定了标准库的 File::lock 方法。在 1.91.0 中,Cargo 切换到了这个标准库实现。
  • 回归原因: 由于代码实现上的疏忽,File::lock 在 illumos 目标平台上始终返回 Unsupported 错误。
  • 影响: 这导致 Cargo 无法在 illumos 上锁定构建目录,使得并发构建变得极不稳定。
  • 修复方案: 1.91.1 在标准库中为 illumos 启用了正确的函数族支持,从而修复了 Cargo 的锁定机制。

三、 总结与建议:哪些人必须立即升级?

虽然 1.91.1 只有两个修复,但其涉及的都是底层稳定性的“地基”。

1. 针对不同开发者的行动指南

  • WebAssembly (Wasm) 开发者: 必须立即升级。 如果你在开发复杂的 Wasm 应用,特别是涉及跨 crate 调用的,1.91.0 可能潜伏着数据损坏的风险。
  • illumos 用户: 强烈建议升级。 解决 Cargo 的锁定问题能显著提升你在该平台上的开发稳定性。
  • 其他平台(Linux/macOS/Windows)开发者: 如果你不涉及 Wasm 开发,此版本对你的影响微乎其微。但本着“能升就升”的原则,建议使用 rustup update stable 保持最新。