Rust 官方团队在 2025 年 8 月 7 日宣布 Rust 1.89.0 发布了。和往常一样,他们的口号依旧是:Rust 是一门让所有人都能写出 既可靠又高效 软件的语言。翻译一下就是:Rust 还是那门让你写的时候怀疑人生、写完以后又感觉“真香”的语言。
安装和更新:老用户点点命令,新用户先准备药膏
老用户:
rustup update stable
一句话就能升级到最新版本。
新用户:
请先去官网下载 rustup,没这个工具的话你连更新 Rust 的资格都没有。然后想当内测勇士的朋友们,可以切换到 beta 或 nightly 频道。友情提示:nightly 用起来会让你血压 nightly 升高。
重点新特性
1. const generics 里可以用 _ 推断了
以前写 [false; LEN] 没问题,但写 [false; _] 编译器会骂你。
现在好了,你可以在某些场景里用 _ 让编译器自己推断长度。
示例:
rust
pub fn all_false() -> [bool; LEN] {
[false; _]
}
这下写测试代码更省心了。不过注意,函数签名里还是不能乱写 _,比如:
rust
pub const fn all_false() -> [bool; _] { ... } // ❌
编译器表示:“兄弟,这锅我不背。”
2. 新的生命周期检查 lint:mismatched\_lifetime\_syntaxes
Rust 的生命周期一直是新手的噩梦。函数签名里你看不见 'a,但返回值偷偷带了生命周期,编译器还一声不吭,结果代码看起来就像“老虎穿草鞋——藏不住爪子”。
例子:
rust
fn items(scores: &[u8]) -> std::slice::Iter {
scores.iter()
}
你一眼看过去,以为没生命周期问题,结果编译器提示:
warning: hiding a lifetime that's elided elsewhere is confusing
现在它会建议你显式写成:
rust
fn items(scores: &[u8]) -> std::slice::Iter<'_, u8>
这算是把“隐身的寿命”显形化,免得初学者半夜骂娘。
总结一下:
* 只要输入和输出的生命周期分属不同“分组”,编译器就会警告。
* 简单说,Rust 不希望你在一边用自动推断,另一边又偷懒不写,结果搞得函数签名像拼图一样。
3. x86 平台新指令支持
Rust 在 x86 上新增了不少指令特性支持,比如 SHA512、SM3、SM4、kl、widekl,还有一堆 avx512 的指令。
你可以像这样写:
rust
#[target_feature(enable = "avx512bw")]
pub fn cool_simd_code(..) { ... }
翻译过来就是:Rust 又多了几把 SIMD 宝剑,谁想写高性能代码,就有更多的武器可以炫技了。
4. 跨平台 doctest
以前 cargo test --doc --target 对于 cross compile 是摆设。现在 doctests 真的会在目标平台跑。
坏消息是:那些原本“假装能跑”的示例,现在会被揭穿。你可能会发现文档里一堆测试过不了。
解决办法:你可以在 doctest 里加上 ignore-:
ignore-x86_64rust
///
/// panic!("something")
///
这相当于跟编译器说:“哥,这测试是摆设,别当真。”
5. i128/u128 可以进
extern "C" 了
Rust 之前警告你别把 i128 和 u128 放到 extern "C",怕 ABI 对不上。现在正式放行,但条件是:
* 在支持 __int128 的平台上,Rust 的 i128/u128 可以跟 C 对齐。
* 没这个类型的地方,你还是要自求多福。
* _BitInt(128) 和 __int128 在某些平台 ABI 不一样,所以别以为这是 100% 万能药。
一句话总结:Rust 官方终于说“你可以试试”,但后果自负。
6. macOS x86\_64 要凉了
苹果官方宣布:x86\_64 架构逐渐退出舞台。GitHub 也要取消免费的 macOS x86\_64 CI 跑机。
于是 Rust 决定:x86_64-apple-darwin 从 Tier 1 降到 Tier 2。
什么意思?
* 以前是 VIP1:保证能跑,还天天测。
* 现在是 VIP2:保证能编译,但不保证你跑出来的结果正常。
换句话说,如果你还在老 Intel Mac 上写 Rust,未来可能会发现奇怪的 bug,没人理你。Rust 官方的潜台词是:该换 Apple Silicon 了。
7. WebAssembly ABI 规范化
wasm32-unknown-unknown 目标下的 extern "C" 现在改用标准化的 ABI 了。以前各平台自己随缘,现在终于走向统一。
对于写跨平台库的开发者,这意味着少踩几个 ABI 对不齐的坑。
平台支持更新
* x86_64-apple-darwin → Tier 2(正在降级)
* 新增 loongarch32-unknown-none 和 loongarch32-unknown-none-softfloat,龙芯 32 位生态也在慢慢扶正。
稳定 API 新增
这次稳定了不少好东西:
* NonZero
* 一堆 x86 的 SIMD intrinsics(含 AVX512、SHA512、SM3、SM4)
* 文件锁相关 API:File::lock, File::unlock 等
* NonNull 新增一堆“显式溯源”的方法
* OsString::leak, PathBuf::leak(可以把堆分配的字符串泄露出去,少写 clone)
* Result::flatten(终于稳定,少一层 .map(|x| x?) 的麻烦)
* Linux 下 TcpStreamExt::quickack 和 set_quickack
而且一些原本只在 runtime 可用的 API 现在 const 上下文也能用,比如:
* <[T; N]>::as_mut_slice
* str::eq_ignore_ascii_case
这让编译期运算更强大,喜欢在 const fn 里折腾的人又能玩花活了。
感谢贡献者
Rust 官方惯例:最后来一段彩虹屁,感谢所有提交代码、提 issue、写文档、修 bug 的人。因为没有他们,Rust 就不会有今天。
# 总结:Rust 还是那个 Rust
Rust 1.89.0 的关键词:
* 更智能的泛型推断
* 更严格的生命周期提示
* 更多的 SIMD 支持
* doctest 真的跨平台了
* i128/u128 跨 C 更安全
* Intel Mac 正在被边缘化
* Wasm ABI 更规范
一句话点评:Rust 依旧在 “提高安全性和规范化” 的道路上狂奔。新手可能觉得门槛又高了一点,但老鸟看到这些改进会心里暗笑:“又少了一处坑。”
要不要我帮你再写一个“知乎风格 Q\&A 版”,比如用「问:这次更新对普通 Rust 程序员有啥用?答:...」的形式,方便你直接贴到知乎回答里?