Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

[Перевод] Rust 1.97.0: манглинг символов, вывод линкера и поддержка запрета предупреждений в Cargo

Дата публикации: 14-07-2026 16:04:14

Команда 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

Основное содержимое страницы с новостью.

Команда 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. Без вас мы бы не справились. Спасибо!

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1Как понять, что делает Rust-компилятор: визуализация AST, MIR и LLVM IR010.815-07-2026
2[Перевод] Сокращаем длительность компиляции проекта на Rust c 30 до 2 минут — пример с 1000 крейтов08.1809-07-2026
3Полностью нечестное сравнение std::expected в C++23 и core::result::Result в Rust07.7609-07-2026
4История о том, как я написал компилятор Svelte на Rust011.8302-08-2026
5const fn в 2026: ваш компилятор втихаря исполняет Rust09.5820-07-2026
6sizeof(Mutex<()>) упал с 40 байт до 5: что внутри std::sync::Mutex после Rust 1.62012.3809-07-2026
7От boot-кода до shell: несколько месяцев разработки ОС на Rust с ИИ-агентами012.8930-07-2026
8Свой VPN на Rust: как я спорил с сетью, TLS и самим собой7827-06-2026
9Биддер «одной цифрой» для Wildberries на Rust: контроллер с мёртвой зоной, лимиты API и выживание под 429012.3427-07-2026
10Test That! 0.5: A powerful test assertion library for Rust5728-06-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 11.43. Источник: habr.com.