Opublikowano następną stabilną wersję kompilatora i standardu języka Rust.
Aktualizacja wbudowanej biblioteki musl do wersji 1.2.5
Różne platformy docelowe *-linux-musl teraz dostarczane są z musl 1.2.5. Dotyczy to głównie statycznych kompilacji musl dla x86_64, aarch64 i powerpc64le, które wcześniej używały wersji 1.2.3. Ta aktualizacja zawiera kilka poprawek i udoskonaleń, a także jedną "łamiącą" zmianę, która dotyczy ekosystemu Rust.
Główną motywacją dla tej aktualizacji były znaczące poprawki w resolverze DNS musl, które pojawiły się w wersji 1.2.4 i zostały rozwinięte w 1.2.5. Użycie musl do statycznego linkowania powinno zwiększyć niezawodność funkcji sieciowych przenośnych plików binarnych Linux, szczególnie podczas pracy z dużymi rekordami DNS i rekurencyjnymi serwerami nazw.
Jednak wersja 1.2.4 zawiera również krytyczną zmianę: usunięcie kilku przestarzałych symboli zgodności, które były używane przez crate libc na GitHubie. Poprawka dla tego została wydana w libc 0.2.146 już w czerwcu 2023 roku (2,5 roku temu), i uważamy, że rozprzestrzeniła się na tyle szeroko, że możemy wprowadzić zmiany w docelowych platformach Rust.
Zezwolenie globalnemu alokatorowi na użycie TLS
Rust 1.93 poprawia wewnętrzne mechanizmy standardowej biblioteki, umożliwiając globalnym alokatorom, napisanym w Rust, korzystanie z std::thread_local! i std::thread::current bez ryzyka re-entrancy dzięki wykorzystaniu systemowego alokatora. Szczegóły można znaleźć w dokumentacji standardowej biblioteki Rust.
Atrybuty cfg w wierszach asm!
Wcześniej, jeśli pojedyncze części sekcji wbudowanej wymagały warunkowej kompilacji cfg, trzeba było duplikować cały blok asm! w całości. W wersji 1.93 atrybut cfg można zastosować do pojedynczych instrukcji w bloku:
asm!( // lub global_asm! lub naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // używane tylko na sse2 );
Zostało przetłumaczone do stabilnego API:
<[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`
Źródło: linux.org.ru
