Rust 1.91.1 发布:修复 Wasm 链接与 illumos 构建锁两大回归缺陷
Rust 团队于 2025 年 11 月 10 日正式发布 1.91.1 补丁版本。如果你已通过 rustup 安装旧版,只需在终端执行:
rustup update stable
即可一键升级。尚未安装 rustup 的用户,可前往官网获取安装指引。
1.91.1 修复了哪些缺陷?
1. WebAssembly 链接与运行时错误
大多数 Rust 目标平台仅通过符号名来识别函数,但 WebAssembly(Wasm)还需额外的「模块名」。
开发者可使用 #[link(wasm_import_module = "...")] 为 extern 块指定模块名:
#[link(wasm_import_module = "hello")]
extern "C" {
pub fn world();
}
回归现象
在 1.91.0 中,如果多个 Rust crate 分别从不同 Wasm 模块导入同名符号,编译阶段可能触发 “import module mismatch” 链接失败;更严重的是,运行时可能绑定到错误函数,引发未定义行为(崩溃、静默数据损坏)。
修复结果
1.91.1 已校正符号解析逻辑,彻底消除该风险。详情见 Issue #148347。
2. illumos 上 Cargo 构建目录锁失效
Cargo 会在 target/ 目录加文件锁,防止多进程同时构建互相干扰。若文件系统不支持锁,Cargo 会收到 Unsupported 错误并自动降级到无锁模式。
回归现象
1.91.0 将加锁实现从自定义代码改为标准库新稳定的 File::lock 系列方法。由于实现疏忽,在 illumos 平台这些方法始终返回 Unsupported,导致即使文件系统支持锁,Cargo 也直接放弃加锁,可能出现构建污染。
修复结果
1.91.1 在标准库层面启用 illumos 的 File::lock 支持,Cargo 的目录锁行为恢复正常。
致谢
本次快速修复离不开社区贡献者的协作。完整的感谢名单请见 thanks.rust-lang.org。
快速总结(TL;DR)
- 只修两条 1.91.0 回归:
① Wasm 同名符号跨 crate 导入会链错/跑错;
② illumos 上 Cargo 因误判而完全不锁构建目录。 - 升级成本 = 一条
rustup update stable。 - 无新功能,无破坏性变更,生产环境可放心采纳。
版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)