Команда Rust рада объявить о новом выпуске Rust 1.97.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение.
Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.97.0 вам достаточно выполнить команду:
$ rustup update stable
Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску 1.97.0 на GitHub.
Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать канал beta (rustup default beta) или nightly (rustup default nightly). Пожалуйста, сообщайте обо всех встреченных вами ошибках.
Что вошло в стабильный 1.97.0
Манглинг символов v0 включен по умолчанию
Когда Rust компилируется в объектные и бинарные файлы, у каждого элемента (функции, статики и т.д.) глобально должно быть уникальное «имя символа» (symbol), которое его идентифицирует. Чтобы избежать конфликтов при линковке разных программ на Rust, компилятор применяет манглинг (кодирование имён символов): к исходному имени элемента добавляется дополнительный контекст — путь модуля, определяющий крейт, обобщённые параметры и другое. Исторически этот манглинг основывался на Itanium ABI, который (иногда) также используется в C++.
Новая схема манглинга устраняет ряд недостатков предыдущей:
-
Инстанциации обобщённых параметров сохраняют свои значения, а не отслеживаются только через хеш
-
Несогласованности: не все части использовали Itanium ABI, поэтому по-прежнему был необходим собственный деманглинг (декодирование имён)
Начиная с Rust 1.59 компилятор поддерживает выбор специализированной для Rust схемы манглинга через -Csymbol-mangling-version=v0. С ноября 2025 года эта схема включена по умолчанию на nightly, а в версии 1.97 — и в стабильном Rust. Устаревшую схему манглинга теперь можно включить только на nightly; в текущих планах полностью её убрать.
Подробности см. в предыдущем посте.
Поддержка запрета предупреждений в Cargo
В CI принято запрещать предупреждения. Исторически это обычно делалось через RUSTFLAGS=-Dwarnings. В Rust 1.97 Cargo сам управляет тем, как предупреждения влияют на успешность сборки: либо заглушает их (уровень allow), либо показывает без провала сборки (по умолчанию warn), либо запрещает их (уровень deny).
Поскольку поведение задаётся конфигурацией Cargo, использование этой возможности не инвалидирует кэш сборки — временно включить её легко. Например, если предупреждения мешают шумом, пока вы правите ошибки после рефакторинга, можно выполнить CARGO_BUILD_WARNINGS=allow cargo check и временно их заглушить.
В CI задания могут вместо этого выставлять CARGO_BUILD_WARNINGS=deny, чтобы запретить предупреждения. Это можно сочетать с --keep-going, чтобы собрать все ошибки и предупреждения, а не останавливаться на первом упавшем пакете.
Подробности см. в документации.
Вывод линкера больше не скрывается по умолчанию
rustc вызывает линкер от лица пользователя. Исторически при успешной линковке rustc по умолчанию заглушал вывод линкера. Это однако может скрывать реальные проблемы, поэтому в Rust 1.97 сообщения линкера включены по умолчанию. Они выдаются как предупреждающая проверка, например:
warning: linker stderr: ignoring deprecated linker optimization setting '1' | = note: `#[warn(linker_messages)]` on by default
Сообщения линкера, которые уже были распознаны как ложные срабатывания или как намеренное поведение, rustc отфильтровывает. Благодаря тому, что на nightly этот вывод больше не скрывается, уже исправлено несколько дефектов.
Обратите внимание: сейчас linker_messages — особая проверка, на которую не влияет группа проверок warnings. Это сделано специально: rustc обычно контролирует вывод линкера не так точно, и нередко сообщения появляются только на части платформ. Если вы видите то, что считаете ложным срабатыванием от линкера, пожалуйста, создайте задачу.
Чтобы временно заглушить предупреждение, вы можете выставить уровень проверки в allow. Это можно сделать в Cargo.toml, добавив секцию lints:
[lints.rust]linker_messages = "allow"
Стабилизированные API
Эти API, ранее уже стабильные, теперь также стабильны в const-контекстах:
Другие изменения
Смотрите полный список изменений в Rust, Cargo и Clippy.
Участники релиза 1.97.0
Многие люди собрались вместе, чтобы создать Rust 1.97.0. Без вас мы бы не справились. Спасибо!
ссылка на оригинал статьи https://habr.com/ru/articles/1059146/