Опубликован следующий стабильный релиз компилятора и стандарта языка Rust.
Обновление встроенной библиотеки musl до версии 1.2.5
Различные целевые платформы *-linux-musl теперь поставляются с musl 1.2.5. В первую очередь это касается статических сборок musl для x86_64, aarch64 и powerpc64le, которые ранее использовали версию 1.2.3. Это обновление включает несколько исправлений и улучшений, а также одно «ломающее» изменение, затрагивающее экосистему Rust.
Основной мотивацией для этого обновления стали значительные улучшения в DNS-резолвере musl, появившиеся в версии 1.2.4 и доработанные в 1.2.5. При использовании musl для статической линковки это должно повысить надежность сетевых функций переносимых бинарных файлов Linux, особенно при работе с большими DNS-записями и рекурсивными серверами имен.
Однако версия 1.2.4 также содержит критическое изменение: удаление нескольких устаревших символов совместимости, которые использовал крэйт libc на GitHub. Исправление для этого было выпущено в libc 0.2.146 еще в июне 2023 года (2,5 года назад), и мы считаем, что оно распространилось достаточно широко, чтобы мы могли внести изменения в целевые платформы Rust.
Разрешение глобальному аллокатору использовать TLS
Rust 1.93 корректирует внутренние механизмы стандартной библиотеки, позволяя глобальным аллокаторам, написанным на Rust, использовать std::thread_local! и std::thread::current без риска re-entrancy за счет использования системного аллокатора. Подробности можно найти в документации стандартной библиотеки Rust.
Атрибуты cfg в строках asm!
Ранее, если отдельные части секции встроенной сборки требовали условной компиляции cfg, приходилось дублировать весь блок asm! целиком. В версии 1.93 атрибут cfg можно применять к отдельным инструкциям внутри блока:
asm!( // or global_asm! or naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // only used on sse2 );
В разряд стабильного API переведено:
<[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_slice` String::into_raw_parts` Vec::into_raw_parts` <iN>::unchecked_neg` <iN>::unchecked_shl` <iN>::unchecked_shr` <uN>::unchecked_shl` <uN>::unchecked_shr` <[T]>::as_array` <[T]>::as_array_mut` <*const [T]>::as_array` <*mut [T]>::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`
Источник: linux.org.ru
