Die nächste stabile Version des Compilers und des Rust-Standards wurde veröffentlicht.
Ein Update der integrierten musl-Bibliothek auf Version 1.2.5
Verschiedene Zielplattformen *-linux-musl werden jetzt mit musl 1.2.5 geliefert. Dies betrifft insbesondere die statischen musl-Bauten für x86_64, aarch64 und powerpc64le, die zuvor Version 1.2.3 verwendet haben. Dieses Update umfasst einige Fehlerkorrekturen und Verbesserungen, sowie eine "brechende" Änderung, die das Rust-Ökosystem betrifft.
Die Hauptmotivation für dieses Update waren erhebliche Verbesserungen im DNS-Resolver von musl, die in Version 1.2.4 eingeführt und in 1.2.5 weiter bearbeitet wurden. Die Verwendung von musl für das statische Verlinken sollte die Zuverlässigkeit der Netzwerkfunktionen von portablen Linux-Binärdateien erhöhen, insbesondere bei der Arbeit mit großen DNS-Einträgen und rekursiven Nameservern.
Die Version 1.2.4 enthält jedoch auch eine kritische Änderung: die Entfernung mehrerer veralteter Kompatibilitätssymbole, die das libc-Crate auf GitHub verwendet hat. Die Lösung dafür wurde im libc 0.2.146 bereits im Juni 2023 veröffentlicht (vor 2,5 Jahren), und wir glauben, dass sie ausreichend verbreitet ist, um die Änderungen an den Zielplattformen von Rust vorzunehmen.
Ermöglichung der Verwendung von TLS durch den globalen Allocator
Rust 1.93 optimiert die internen Mechanismen der Standardbibliothek, sodass globale Allocatoren, die in Rust geschrieben sind, std::thread_local! und std::thread::current ohne Risiko von Re-Entrancy unter Verwendung des Systemallocators nutzen können. Weitere Einzelheiten finden Sie in der Dokumentation der Rust-Standardbibliothek.
cfg-Attribute in asm!-Zeilen
Früher musste der gesamte asm!-Block dupliziert werden, wenn einzelne Teile der eingebetteten Kompilierungssektion bedingte Kompilierung mit cfg benötigten. In Version 1.93 kann das cfg-Attribut auf einzelne Anweisungen innerhalb des Blocks angewendet werden:
asm!( // oder global_asm! oder naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // wird nur auf sse2 verwendet );
In die Kategorie stabiler API überführt:
<[MaybeUninit]>::assume_init_drop <[MaybeUninit]>::assume_init_ref` <[MaybeUninit]>::assume_init_mut` <[MaybeUninit]>::write_copy_of_slice` <[MaybeUninit]>::write_clone_of_slice` String::into_raw_parts` Vec::into_raw_parts` ::unchecked_neg` ::unchecked_shl` ::unchecked_shr` ::unchecked_shl` ::unchecked_shr` ::as_array` ::as_array_mut` ::as_array` ::as_array_mut` VecDeque::pop_front_if` VecDeque::pop_back_if` Duration::from_nanos_u128` char::MAX_LEN_UTF8` char::MAX_LEN_UTF16` std::fmt::from_fn` std::fmt::FromFn`
Quelle: linux.org.ru
