Команда 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. Без вас мы бы не справились. Спасибо!
IvanChikanov
Доброго дня. Я недавно начал писать на раст и это первое обновления языка которое я застал уже имея пару небольших проектов на раст. И у меня возник вот такой вопрос.
Обновления языка часто приводят к несовместимости с подклченным крейтами? К примеру я использую serde, tokio и еще набор не таких популярных крейтов. Если я просто обновлю язык до новой версии, то я могу быть уверен что все будет работать или надо проверять совместимость каждого крейта с новой версии языка ?
Kerrigan
Сейчас несовместимость при обновлении бывает не так часто, но больше зависит от авторов библиотеки.
Если вас беспокоит стабильность сборки - зафиксируйте версию rust в rust-toolchain.toml https://rust-lang.github.io/rustup/overrides.html#the-toolchain-file
v_0ver
Уже 3 года использую
nightlyверсию для разработки петпроектов(https://github.com/hexqnt), и некоторых рабочих, и ни разу не было проблем с обратной совместимостью по компилятору. Даже переход с 2021 edition на 2024 не потребовал усилий. В 99% случаев если, что-то перестанет работать при обновлении компилятора, то оно вам об этом сообщит - скрытого отказа не будет.