Rust 1.99 發布:穩定 C 可變參數函數與裸指標佈局查詢

Rust 1.99 發布:穩定 C 可變參數函數與裸指標檢查

Rust 團隊於 2026 年 10 月 1 日宣佈 Rust 1.99.0 發布。已安裝 rustup 的使用者可以 rustup update stable 取得新版本。[1]

C 可變參數函數

官方指出,1.99.0 穩定了以「C」及「C-unwind」ABI 定義 C ABI 可變參數函數的能力。這類函數使用可變參數列表(...),可接受任意數目的引數。[1]

官方說明,Rust 過去已能呼叫外部定義的可變參數函數(例如 libc::printf);由 Rust 1.99 起,這些函數可以直接用 Rust 定義。... 的類型是 VaList,在各目標平台上與 C 的 va_list 類型 ABI 相容;可從 VaList 讀取那些類型,由 VaArgSafe trait 規範。[1]

此外,此版本也穩定支持以非「C」ABI 定義裸(naked)可變參數函數,函數必須以內聯組裝彈開。[1]

由裸指標取得佈局資訊

官方指出,此版本釐清了從裸指標取得大小與對齊的安全要求,涵蓋 Sized 與非 Sized 類型,做法是穩定三個函數:Layout::for_value_raw、mem::size_of_val_raw 與 mem::align_of_val_raw。[1]

Box::leak 的新建議

官方表示,Rust 1.99 沒有改變語言語義,但更新了 Box::leak 的文件,建議不要採用其後再把記憶體釋放的模式。官方解釋,這類程式碼與現時及未來可能的編譯器優化有不良互動,阻礙著自記憶體配置器即將穩定,問題將其明顯;官方建議改用 Box::into_non_null 或 Box::into_raw。相同建議也適用於標準庫中其他 leak 函數。[1]

其他穩定項目

官方列出 1.99.0 新穩定的部分 API,包括 Box、&Box 與 &mut Box 的 IntoIterator 實作、VecDeque::retain_back、core::ffi::VaList、Box::into_non_null 與 Box::from_non_null、Vec::into_parts 與 Vec::from_parts、core::mem::size_of_val_raw、core::mem::align_of_val_raw、core::alloc::Layout::for_value_raw、String::from_utf8_lossy_owned、string::FromUtf8Error::into_utf8_lossy、StepBy 的 FusedIterator,以及 std::fs::set_times 與 std::fs::set_times_nofollow。[1]

官方指出,Rust、Cargo 與 Clippy 的完整改動清單可於各發布頁面查閱,並感謝所有參與 1.99.0 的貢獻者。[1][2]

參考資料

[1] Rust 官方部落格 — Announcing Rust 1.99.0(2026 年 10 月 1 日)

[2] Rust 官方文件 — 1.99.0 詳細發布聲明

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

*