Rust 1.93

Опубликован следующий стабильный релиз компилятора и стандарта языка 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]>::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`
<[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`
>>> Источник
