Команда Rust рада объявить о новом выпуске Rust 1.95.0. Rust — это язык программирования, который дает каждому возможность создавать надежное и эффективное программное обеспечение.
Если у вас уже установлена предыдущая версия Rust через rustup, вы можете получить 1.95.0 командой:
$ rustup update stable
Если у вас еще не установлен Rust, вы можете получить rustup на соответствующей странице нашего сайта, а также ознакомиться с подробными примечаниями к выпуску 1.95.0.
Если вы хотите помочь нам, тестируя будущие релизы, попробуйте локально переключиться на beta-канал (rustup default beta) или nightly-канал (rustup default nightly). Пожалуйста, сообщайте о любых найденных ошибках!
Что вошло в стабильный 1.95.0
cfg_select!
В Rust 1.95 появилась макрокоманда cfg_select!, которая работает примерно как match на этапе компиляции по cfg. Она решает ту же задачу, что и популярный крейт cfg-if, хотя и с другим синтаксисом. cfg_select! разворачивается в правую часть первой ветки, чей предикат конфигурации вычисляется в true. Несколько примеров:
cfg_select! { unix => { fn foo() { /* функциональность только для unix */ } } target_pointer_width = "32" => { fn foo() { /* функциональность для не-unix, 32-бит */ } } _ => { fn foo() { /* резервная реализация */ } }}let is_windows_str = cfg_select! { windows => "windows", _ => "not windows",};
if-let guards в match-выражениях
В Rust 1.88 были стабилизированы цепочки let. В Rust 1.95 эта возможность пришла и в match-выражения, позволяя задавать условия на основе сопоставления с образцом.
match value { Some(x) if let Ok(y) = compute(x) => { // И `x`, и `y` доступны здесь println!("{}, {}", x, y); } _ => {}}
Обратите внимание: сейчас компилятор не учитывает образцы, сопоставленные в if let-guards, как часть проверки полноты покрытия (exhaustiveness) всего match, так же как и в случае с обычными if-guards.
Стабилизированные API
Эти API, ранее уже стабильные, теперь также стабильны в const-контекстах:
Дестабилизированные JSON-спецификации целей
Rust 1.95 убирает в stable поддержку передачи пользовательской спецификации цели в rustc. Это не должно затронуть пользователей Rust, работающих с полностью stable toolchain, поскольку сборка стандартной библиотеки (включая только core) и так требовала возможностей, доступных только в nightly.
Мы также собираем сценарии использования пользовательских целей в tracking issue, пока решаем, стоит ли в будущем стабилизировать какую-либо форму этой функциональности.
Другие изменения
Смотрите полный список изменений в Rust, Cargo и Clippy.
Участники релиза 1.95.0
Над созданием Rust 1.95.0 работало много людей. Без вас это было бы невозможно. Спасибо!
ссылка на оригинал статьи https://habr.com/ru/articles/1024620/