Rust 1.93.0: musl обновлён до 1.2.5, а глобальный аллокатор разрешено писать на Rust

22.01.2026

Вышел Rust 1.93.0. Два изменения заметны за пределами списка стабилизированного: musl во всех таргетах обновлён до 1.2.5, а глобальный аллокатор теперь может использовать thread_local! и std::thread::current без риска повторного входа.

musl 1.2.5

Обновление принесло переписанный DNS-резолвер, и статические бинарники Linux с сетью стали надёжнее — особенно на больших DNS-записях и рекурсивных серверах имён.

Плата — ломающее изменение в libc: musl 1.2.4 удалил устаревшие символы совместимости. Об этом Rust предупредил ещё в декабре 2025 года, так что повреждать сборки застаревшими зависимостями не придётся, если следовать объявлениям.

Глобальный аллокатор и thread-local

Внутреннее устройство стандартной библиотеки изменено так, чтобы глобальный аллокатор, написанный на Rust, мог пользоваться thread_local! и получать текущий поток без риска повторного входа. Внутри используется системный аллокатор.

Чинить обратную сторону: раньше аллокатор на Rust не мог трогать эти механизмы, потому что они сами вызывают выделение памяти, а значит аллокатор — то есть возникал риск рекурсии. Теперь это сделано безопасно, и пользовательские аллокаторы могут использовать локальные переменные потока.

cfg на отдельных инструкциях ассемблера

Раньше, если отдельную инструкцию внутри блока asm! нужно было условно исключить, приходилось дублировать весь блок — с этой инструкцией и без. Теперь cfg применяется к отдельным инструкциям внутри блока.

Для кода с платформенными различиями в ассемблере это означает конец дублирования. На практике такие блоки обычно крупные, и каждое изменение в них приходилось повторять вручную.

Что стабилизировано

  • методы для [MaybeUninit<T>]: assume_init_drop, assume_init_ref, assume_init_mut и write_copy_of_slice;
  • String::into_raw_parts и Vec::into_raw_parts — разбор значения на части без копирования, что избавляет от самописных обёрток при работе с C;
  • unchecked_neg, unchecked_shl, unchecked_shr для целых — операции без проверки переполнения;
  • as_array и as_mut_array для срезов и сырых указателей на срезы;
  • VecDeque::pop_front_if и pop_back_if;
  • Duration::from_nanos_u128, char::MAX_LEN_UTF8 и MAX_LEN_UTF16, std::fmt::from_fn.

Оригинал

Announcing Rust 1.93.0 от 22 января 2026 года

Упоминаний: 1 · Просмотров: 2