Добавить в корзинуПозвонить
Найти в Дзене
Ржавый код

Анонс Rust 1.70.0

01 июня 2023 · Команда по выпуску Rust Команда Rust рада анонсировать новую версию Rust, 1.70.0. Rust - это язык программирования, позволяющий каждому создавать надежное и эффективное программное обеспечение. Если у вас установлена предыдущая версия Rust через rustup, вы можете получить 1.70.0: Если у вас его еще нет, вы можете получить `rustup` с соответствующей страницы на нашем веб-сайте и ознакомиться с подробными примечаниями к выпуску 1.70.0 на GitHub. Если вы хотите помочь нам, протестировав будущие версии, вы можете рассмотреть возможность локального обновления, чтобы использовать бета-канал (rustup default beta) или ночной канал (rustup default nightly). Пожалуйста, сообщайте о любых ошибках, с которыми вы можете столкнуться! Что находится в стабильной версии 1.70.0 sparse протокол по умолчанию для crates.io «sparse» протокол Cargo теперь включен по умолчанию для чтения индекса из `crates.io`. Эта функция была ранее стабилизирована с помощью Rust 1.68.0, но все равно требовала
Оглавление

01 июня 2023 · Команда по выпуску Rust

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

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

-2

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

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

Что находится в стабильной версии 1.70.0

sparse протокол по умолчанию для crates.io

«sparse» протокол Cargo теперь включен по умолчанию для чтения индекса из `crates.io`. Эта функция была ранее стабилизирована с помощью Rust 1.68.0, но все равно требовала настройки для использования с `crates.io`. Объявленный план состоял в том, чтобы сделать этот по умолчанию в 1.70.0, и вот он!

При извлечении информации из индекса `crates.io` необходимо значительно повысить производительность. Пользователям, поддерживающим брандмауэр, необходимо будет обеспечить доступность доступа к https://index.crates.io. Если по какой-то причине необходимо сохранить предыдущее значение по умолчанию использования индекса `git`, размещенного в GitHub, для изменения значения по умолчанию можно использовать параметр конфигурации `registries.crates-io.protocol`.

Один побочный эффект при изменении метода доступа заключается в том, что это также изменяет путь к кэшу крейта, поэтому зависимости будут загружены заново. Как только вы полностью обязались использовать `sparse` протокол, вы можете очистить старые пути `$CARGO_HOME/registry/*/github.com-*`.

OnureCell и OnureLock

Два новых типа были стабилизированы для одноразовой инициализации общих данных: `OnceCell` и его потокобезопасный аналог `OnceLock`. Они могут быть использованы везде, где немедленное построение не требуется и, возможно, даже невозможное, например, данные без const в глобальных переменных.

-3

Такие крейты, как `lazy_static` и `once_cell`, удовлетворяли эту потребность в прошлом, но теперь эти компоновочные блоки являются частью стандартной библиотеки, перенесенной из модулей рассинхронизации и синхронизации `once_cell`. Есть еще больше методов, которые могут быть стабилизированы в будущем, а также сопутствующие типы `LazyCell` и `LazyLock`, которые хранят свою инициализирующую функцию, но этот первый шаг в стабилизации уже должен охватывать многие варианты использования.

IsTerminal

Этот недавно стабилизированный трейт имеет единственный метод, `is_terminal`, чтобы определить, представляет ли данный дескриптор или дескриптор файла терминал или `TTY`. Это еще один случай стандартизации функциональности, которая существовала во внешних пакетах, таких как `atty` и `is-terminal`, с использованием функции `isatty` библиотеки `C` в целях Unix и аналогичной функциональности в других местах. Распространенным вариантом использования является то, что программы различают работу в сценариях или интерактивных режимах, таких как представление цветов или даже полный `TUI` в интерактивном режиме.

-4

Именованные уровни отладочной информации

Параметр компилятора `-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]` скомпилированы, исполняемый файл получает интерфейс командной строки из тестового крейта. Этот CLI имеет ряд опций, в том числе некоторые, которые еще не стабилизированы и требуют указания `-Zunstable-options`, как и многие другие команды в цепочке инструментов Rust. Однако, хотя это предназначено только для ночных сборок, это ограничение не было активным в тестировании - до сих пор. Начиная с версии 1.70.0, стабильные и бета-сборки Rust больше не будут допускать нестабильные варианты тестирования, что делает их действительно только для ночных, как задокументировано.

Известны случаи, когда нестабильные опции могли использоваться без прямых знаний пользователя, особенно `--format json`, используемый в IntelliJ Rust и других плагинах IDE. Эти проекты уже подстраиваются под это изменение, и при их отслеживании можно учитывать состояние результатов работы JSON.

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

Другие изменения

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

Участники 1.70.0

Многие люди объединились, чтобы создать Rust 1.70.0. Мы не смогли бы сделать это без всех вас. Спасибо!

Статья на list-site.