Команда Rust рада сообщить о новой версии языка — 1.70.0. Rust — это язык программирования, позволяющий каждому создавать надёжное и эффективное программное обеспечение. Если у вас есть предыдущая версия Rust, установленная через rustup, то для обновления до версии 1.70.0 вам достаточно выполнить команду: Если у вас ещё не установлен rustup, вы можете установить его с соответствующей страницы нашего веб-сайта, а также посмотреть подробные примечания к выпуску на GitHub. Если вы хотите помочь нам протестировать будущие выпуски, вы можете использовать beta (rustup default beta) или nightly (rustup default nightly) канал. Пожалуйста, сообщайте обо всех встреченных вами ошибках. Протокол 'sparse' Cargo теперь включён по умолчанию для чтения индекса из crates.io. Ранее эта функция была стабилизирована в Rust 1.68.0, но для её использования с crates.io по прежнему требовалась настройка. Мы обещали, что это поведение будет использоваться по умолчанию в версии 1.70.0 — и вот оно! Вы увидите существенное повышение производительности при извлечении информации из индекса crates.io. Пользователям, ограниченным фаерволом, необходимо будет убедиться, что https://index.crates.io доступен. Если по какой-либо причине вам нужно сохранить предыдущие настройки по умолчанию с использованием git-индекса c GitHub, вы можете использовать параметр конфигурации registries.crates-io.protocol для изменения используемого протокола. Побочный эффект изменения метода доступа в том, что изменяется также и путь к кэшу пакетов — и все зависимости загружаются заново. Как только вы полностью перейдёте к использованию протокола 'sparse', вы сможете удалить старый кэш $CARGO_HOME/registry/*/github.com-*. Два новых типа были стабилизированы для единовременной инициализации совместно используемых данных: OnceCell и его потокобезопасный аналог OnceLock. Они могут быть использованы везде, где немедленное создание нежелательно или даже невозможно, например, не-const данные в глобальных переменных. Такие пакеты, как lazy_static и once_cell, в прошлом удовлетворяли эту потребность, но теперь они являются частью стандартной библиотеки, перенесённой из once_cell в модули unsync и sync. Есть ещё методы, которые могут быть стабилизированы в будущем, а также сопутствующие типы LazyCell и LazyLock, которые сохраняют свою инициализирующую функцию, но этот первый шаг в стабилизации уже должен охватывать множество вариантов использования. Этот недавно стабилизированный трейт имеет единственный метод is_terminal для определения того, является ли реализация файловым дескриптором или же дескриптором терминала или TTY. Это ещё один случай стандартизации функционала, существовавшего во внешних пакетах, например atty и is-terminal, использующих функции библиотеки C isatty в целевых системах Unix, а также в других местах. Этот функционал часто используется в программах, которые должны различать, где проходит запуск — в скриптах или интерактивных режимах, например для представления цветов или даже полного TUI в интерактивном режиме. Опция компилятора -Cdebuginfo ранее поддерживала только числа 0..=2 для увеличения объёма отладочной информации, где Cargo по умолчанию использовал 2 в профилях dev и test и 0 в профилях release и bench. Эти уровни отладки теперь имеют имена «none» (0), «limited» (1) и «full» (2). Также появилось два новых уровня: «line-directives-only» и «line-tables-only». Документация Cargo и rustc ранее называла уровень 1 «line tables only», но не содержала информации о типах и переменных — только информацию обо всех функциях. Этот уровень теперь называется «limited», а новый уровень «line-tables-only» усечён до минимума, необходимого для обратных трассировок с именами файлов и номерами строк. В конечном итоге это может стать уровнем, используемым для -Cdebuginfo=1. Другой уровень line-directives-only предназначен для профилирования NVPTX и не рекомендуется для использования в других случаях. Обратите внимание, что именованные опции недоступны для использования в Cargo.toml. Их поддержка запланирована на следующий выпуск, 1.71. Когда функции #[test] скомпилированы, исполняемый файл получает интерфейс командной строки из пакета test. Этот CLI имеет несколько опций, включая ещё нестабильные и требующие указания -Zunstable-options (как и многие другие команды в наборе инструментов Rust). Однако хоть и предполагается, что использование этой опции разрешено только в ночных сборках, это ограничение до сих пор не было активным в test. Начиная с версии 1.70.0, stable и beta-версии Rust больше не будут позволять использовать нестабильные параметры при запуске тестов, что приводит эти опции в соответствие с документацией и делает их возможными только в nightly-сборках. Известны случаи, когда нестабильные параметры могли использоваться без ведома пользователя, особенно --format json, используемый в IntelliJ Rust и других плагинах IDE. Эти проекты уже приспосабливаются к этому изменению, и за статусом вывода JSON можно следить в соответствующей задаче. Проверьте всё, что изменилось в Rust, Cargo и Clippy. Многие люди собрались вместе, чтобы создать Rust 1.70.0. Без вас мы бы не справились. Спасибо! С любыми вопросами по языку Rust вам смогут помочь в русскоязычном Телеграм-чате или же в аналогичном чате для новичковых вопросов. Если у вас есть вопросы по переводам или хотите помогать с ними, то обращайтесь в чат переводчиков. Данную статью совместными усилиями перевели TelegaOvoshey, kunansy, andreevlex и funkill. Язык программирования