Rust 1.99.1 预发布版本已开放测试,正式版定于 10 月 15 日发布。这是一个小版本,但修的是一个会让程序静默出错的问题。
修的是什么
该版本修复了 x86_64 上 FFI 返回 bool 类型时的误编译问题(issue 163911)。报告该问题的开发者已确认 1.99.1 解决了他遇到的情况。
为什么这类 bug 危险
布尔值在 ABI 层面的合法取值只有 0 和 1。编译器通常假设这一点,于是可以对返回值做基于该假设的优化。一旦生成的代码产生了其他位模式,后续基于布尔值的分支判断就可能走进完全错误的路径——而且不会崩溃,只会算错。
跨 FFI 边界的问题尤其难查,因为它只在特定的编译器版本、特定的优化等级、特定的调用组合下出现,而且现象在调用方而不是定义方。
怎么提前验证
本地测试方式:
RUSTUP_DIST_SERVER=https://dev-static.rust-lang.org rustup update stable
索引地址是 https://dev-static.rust-lang.org/dist/2026-10-13/index.html。
给团队的建议
一、涉及 FFI 的模块,CI 里应该同时跑 debug 和 release 两种构建。这类误编译绝大多数只在优化开启后出现。
二、跨语言边界的类型尽量用显式的整型(u8、i32)而不是 bool,自己约定 0 与非 0 的语义,能绕开一整类 ABI 假设问题。
三、升级小版本编译器后,对涉及 FFI 的部分单独跑一遍集成测试,不要只依赖单元测试。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。