Rust 1.93.0 穩定版已正式發佈,主要帶來以下變化:
將捆綁的 musl 更新至 1.2.5 版本
各類*-linux-musltargets 現均搭載 musl 1.2.5 版本。這主要影響到捆綁了 musl 1.2.3 的靜態 musl 構建版本,例如x86_64、aarch64和powerpc64le。此次更新包含多項修復和改進,並引入一項影響 Rust 生態系統的破壞性變更。
對於 Rust 生態系統而言,此次更新的主要動機是大幅改進 musl 的 DNS 解析器,該改進在 1.2.4 版本中首次推出,並在 1.2.5 版本中修復了一些錯誤。當使用musl targets 進行靜態鏈接時,這將顯著提升可移植 Linux 二進制文件的網絡操作可靠性,尤其在處理大型 DNS 記錄和遞歸域名服務器時效果顯著。
然而,1.2.4 版本也帶來了一個破壞性變更:移除了 Rust libc crate 使用的幾個舊版兼容性符號。該問題的修復程序已在 2023 年 6 月發佈的 libc 0.2.146 版本中提供(距今已有兩年半時間),項目團隊認為修復程序已得到充分普及,因此準備在 Rust targets 中進行相應的更改。
詳情可參閲之前的公告。
允許全局分配器使用線程局部存儲
Rust 1.93 調整了標準庫的內部結構,允許用 Rust 編寫的全局分配器使用 std 庫,並且 std::thread::current通過使用系統分配器來避免重入問題。
Rust 1.93 調整了標準庫的內部實現,使用 Rust 編寫的全局分配器能夠通過使用系統分配器來避免重入性問題,從而安全地使用 std's thread_local! 和 std::thread::current。
詳情參閲文檔。
cfg attributes on asm! lines
asm!( // or global_asm! or naked_asm!
"nop",
#[cfg(target_feature = "sse2")]
"nop",
// ...
#[cfg(target_feature = "sse2")]
a = const 123, // only used on sse2
);
Stabilized APIs
<[MaybeUninit<T>]>::assume_init_drop<[MaybeUninit<T>]>::assume_init_ref<[MaybeUninit<T>]>::assume_init_mut<[MaybeUninit<T>]>::write_copy_of_slice<[MaybeUninit<T>]>::write_clone_of_sliceString::into_raw_partsVec::into_raw_parts<iN>::unchecked_neg<iN>::unchecked_shl<iN>::unchecked_shr<uN>::unchecked_shl<uN>::unchecked_shr<[T]>::as_array<[T]>::as_mut_array<*const [T]>::as_array<*mut [T]>::as_mut_arrayVecDeque::pop_front_ifVecDeque::pop_back_ifDuration::from_nanos_u128char::MAX_LEN_UTF8char::MAX_LEN_UTF16std::fmt::from_fnstd::fmt::FromFn