Команда Rust рада сообщить о новой версии языка — 1.93.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.

Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.93.0 вам достаточно выполнить команду:

$ rustup update stable

Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub.

Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.

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

Обновлён встроенный musl до версии 1.2.5

Различные целевые платформы *-linux-musl теперь поставляются с musl 1.2.5. Это в первую очередь затрагивает статические сборки musl для x86_64, aarch64 и powerpc64le со встроенным musl 1.2.3. Данное обновление включает несколько исправлений и улучшений, а также критическое изменение, которое затрагивает экосистему Rust.

Основной причиной этого обновления для экосистемы Rust стали значительные улучшения в DNS-резолвере musl, которые появились в версии 1.2.4 и получили исправления ошибок в 1.2.5. Это должно сделать переносимые бинарные файлы Linux, работающие с сетью, более надёжными при использовании целевых платформ musl для статической линковки — особенно при работе с большими DNS-записями и рекурсивными серверами имён.

Однако версия 1.2.4 также содержит критическое изменение: удалено нескольких устаревших интерфейсов для обратной совместимости, которые использовал крейт libc. Это исправление было выпущено в libc 0.2.146 в июне 2023 года (2,5 года назад), и мы полагаем, что оно распространилось достаточно широко, чтобы мы могли внести его в целевые платформы Rust.

Для получения большего количества деталей смотрите наш предыдущий анонс.

Глобальному аллокатору разрешено использовать локальное хранилище потока

Rust 1.93 корректирует внутренние механизмы стандартной библиотеки, чтобы позволить глобальным аллокаторам, написанным на Rust, использовать макрос thread_local! и функцию std::thread::current из std без риска повторного входа с системным аллокатором.

Больше деталей — в документации.

cfg в asm!

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

asm!( // или global_asm!, или naked_asm!
    "nop",
    #[cfg(target_feature = "sse2")]
    "nop",
    // ...
    #[cfg(target_feature = "sse2")]
    a = const 123, // используется только в sse2
);

Стабилизированные API

Прочие изменения

Проверьте всё, что изменилось в Rust, Cargo и Clippy.

Кто работал над 1.93.0

Многие люди собрались вместе, чтобы создать Rust 1.93.0. Без вас мы бы не справились. Спасибо!