Rust 1.92.0 於 2025年12月11日預發佈,並在 12月14日正式發佈。本次版本更新在語言特性、編譯器、標準庫、Cargo、Rustdoc 等多個方面都有重要改進與優化。以下是詳細內容。
一、語言層面更新
- 完善 MaybeUninit 的表示與有效性文檔
進一步明確MaybeUninit類型的內部表示和有效性規則,使文檔更加清晰。 - 允許在安全代碼中對 union 字段使用 &raw mut/const
現在可以在安全代碼中創建 union 字段的原始引用,提升靈活性。 - 自動特徵和 Sized 約束更傾向於使用關聯類型的 item bounds
優化類型推斷與 trait 約束邏輯,使語義更加一致。 - 不再在 [X; 0] 中生成 X,當 X 正在執行常量解包(unsizing)時
減少不必要的物化操作,提高編譯效率。 - 支持 #[track_caller] 與 #[no_mangle] 組合使用
前提是所有聲明都明確指定#[track_caller],這一改動讓調用位置跟蹤更靈活。 - “never” 類型相關警告調整
兩個 lints:never_type_fallback_flowing_into_unsafe與dependency_on_unit_never_type_fallback被默認設置為 deny-by-default。 - 允許為同一關聯項指定多個約束
在 trait 對象中除外,這為更復雜的類型定義提供可能性。 - 加強高階生命週期區域處理
對一致性(coherence)規則進行輕微強化。 - 優化 unused_must_use lint
當返回類型為Result<(), !>或ControlFlow<!, ()>時,不再警告,因為這些錯誤邏輯上永遠不會發生。
二、編譯器更新
- mips64el-unknown-linux-muslabi64 改為動態鏈接
提升可移植性和構建一致性。 - 移除嵌入命令行參數到 PDB 的舊代碼
有關命令行信息的嵌入通常不影響調試工具,移除後減少增量編譯問題,即使目標未使用 PDB 調試信息。
三、標準庫更新
- 特化 Iterator::eq 與 Iterator::eq_by 對 TrustedLen 迭代器的實現
性能更優,對安全迭代器的比較操作優化。 - 簡化 Extend 對元組的實現
優化泛型擴展邏輯,提高可讀性。 - 在 EncodeWide 的 Debug 輸出中增加詳細信息
便於調試與日誌分析。 - iter::Repeat 的 last 與 count 方法行為變化
這兩個方法現在會觸發 panic,而不再陷入無限循環。
四、穩定 API
以下新 API 已正式穩定:
NonZero<u{N}>::div_ceilLocation::file_as_c_strRwLockWriteGuard::downgradeBox::new_zeroedBox::new_zeroed_sliceRc::new_zeroedRc::new_zeroed_sliceArc::new_zeroedArc::new_zeroed_slicebtree_map::Entry::insert_entrybtree_map::VacantEntry::insert_entryimpl Extend<proc_macro::Group> for proc_macro::TokenStreamimpl Extend<proc_macro::Literal> for proc_macro::TokenStreamimpl Extend<proc_macro::Punct> for proc_macro::TokenStreamimpl Extend<proc_macro::Ident> for proc_macro::TokenStream
此外,以下此前穩定的 API 現可在 const 環境中使用:
<[_]>::rotate_left<[_]>::rotate_right
五、Cargo 更新
新增了 Cargo 文檔章節:“構建性能優化”。
旨在幫助開發者瞭解如何提升構建速度,減少編譯時長。
六、Rustdoc 改進
- 搜索項優化
當 trait 項出現在搜索結果中時,Rustdoc 將隱藏對應的 impl 項。
例如,搜索 “last” 只顯示Iterator::last,而不再顯示std::vec::IntoIter::last,從而讓固有方法如BTreeSet::last更易被發現。 - 放寬標識符搜索規則
搜索詞只需符合標識符形式,而不必是有效的 Rust 代碼。
例如,現在可以搜索以數字開頭的標識符。
七、兼容性説明
- 修復 Linux 下 -C panic=abort 的回溯問題
默認生成 unwind 表,若希望繼續省略請加-C force-unwind-tables=no。 - lint invalid_macro_export_arguments 升級為 deny-by-default
該警告將在依賴項中也被報告,屬於編譯器屬性診斷重構的一部分。 - 最低外部 LLVM 版本更新至 20
- 阻止下游對 Pin 實現 DerefMut
- 不再對非擴展的 pin! 和格式化宏參數應用臨時生命週期擴展規則
八、總結
代碼地址:github.com/rust-lang/rust
Rust 1.92.0 帶來了語言層面更安全靈活的設計、標準庫與編譯器的性能提升,以及更完善的文檔與調試能力。對於開發者而言,本次更新進一步鞏固了 Rust 在安全與性能兼顧方向上的領先地位。
結語:
Rust 1.92.0 的諸多改進不僅優化了底層編譯行為,也在語言級別上為未來的生態發展鋪平了道路。對於正在持續關注 Rust 的開發者而言,這是一個值得深入瞭解的版本。