Главная » Хабрахабр » [Перевод] Выпуск Rust 1.29

[Перевод] Выпуск Rust 1.29

29. Команда разработчиков Rust рада сообщить о выпуске новой версии Rust: 1. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода. 0.

29. Если у вас установлена предыдущая версия Rust с помощью Rustup, то для обновления Rust до версии 1. 0 вам достаточно выполнить:

$ rustup update stable

С подробными примечаниями к выпуску Rust 1. Если у вас еще не установлен Rustup, вы можете установить его с соответствующей страницы нашего веб-сайта. 0 можно ознакомиться на GitHub. 29.

Что вошло в стабильную версию 1.29.0

29 привносит не очень много изменений. 1. 30 и 1. Ожидается что Rust 1. 29 итерации ушла на подготовку к будущим изменениям. 31 будут очень значительными, так что большая часть 1. Два самых заметных нововведения этого выпуска даже не касаются самого языка: это две новые возможности Cargo и обе они касаются предупреждений.

  • cargo fix автоматически исправляет предупреждения в коде
  • cargo clippy — статический анализатор Rust кода, помогающий поймать распространенные ошибки и просто улучшить код

cargo fix

29 у Cargo появляется новая подкоманда: cargo fix. С выпуском Rust 1. Например, рассмотрим такой код: Если вы когда-либо писали на Rust, то скорее всего уже сталкивались с предупреждениями компилятора.

fn do_something() fn main() { for i in 0..100 { do_something(); }
}

Rust предупреждает нас об этом: В нем мы вызываем do_something сто раз, но никогда не используем переменную i.

> cargo build Compiling myprogram v0.1.0 (file:///path/to/myprogram)
warning: unused variable: `i` --> src\main.rs:4:9 |
4 | for i in 1..100 { | ^ help: consider using `_i` instead | = note: #[warn(unused_variables)] on by default Finished dev [unoptimized + debuginfo] target(s) in 0.50s

Мы можем автоматически применить ее при помощи cargo fix: Видите подсказку о переименовании в _i?

> cargo fix Checking myprogram v0.1.0 (file:///C:/Users/steve/tmp/fix) Fixing src\main.rs (1 fix) Finished dev [unoptimized + debuginfo] target(s) in 0.59s

Если теперь мы откроем src\main.rs, то увидим исправленный код:

fn do_something() {} fn main() { for _i in 0..100 { do_something(); }
}

Теперь в коде используется _i, и предупреждение больше не выдается.

Для своей работы cargo fix использует специальный API компилятора, который предлагает исправлять только те предупреждения, в которых мы абсолютно уверены. Первая версия cargo fix исправляет далеко не все предупреждения. Со временем их список будет расширяться.

cargo clippy

Clippy это статический анализатор, который выполняет много дополнительных проверок вашего кода. Еще о предупреждениях: теперь вы можете попробовать cargo-clippy через Rustup.

Например:

let mut lock_guard = mutex.lock(); std::mem::drop(&lock_guard) operation_that_requires_mutex_to_be_unlocked();

Вызов drop для ссылки имеет мало смысла и почти наверняка является ошибкой. Синтаксически это правильный код, но мы можем получить дедлок, потому что вызвали drop для _ссылки на lock_guard_, а не для самого lock_guard.

Установим предварительную версию Clippy через Rustup:

$ rustup component add clippy-preview

и запустим ее:

$ cargo clippy
error: calls to `std::mem::drop` with a reference instead of an owned value. Dropping a reference does nothing. --> src\main.rs:5:5 |
5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: #[deny(drop_ref)] on by default
note: argument has type &std::result::Result<std::sync::MutexGuard<'_, i32>, std::sync::PoisonError<std::sync::MutexGuard<'_, i32>>> --> src\main.rs:5:20 |
5 | std::mem::drop(&lock_guard); | ^^^^^^^^^^^ = help: for further information visit https://rust-lang-nursery.github.io/rust-clippy/v0.0.212/index.html#drop_ref

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

0, поэтому набор и поведение проверок еще могут меняться. Обратите внимание, что это только ознакомительная версия; Clippy еще не достиг 1. Мы выпустим компонент clippy, как только он будет стабилизирован, а пока просим вас посмотреть на деле предварительную версию и рассказать нам о своем опыте.

Работа над этим ведется. Да, есть еще нюанс: к сожалению, пока что нельзя использовать clippy вместе с cargo-fix.

Подробности смотрите в примечаниях к выпуску.

Стабилизация стандартной библиотеки

В этом выпуске были стабилизированы следующие API:

Также, теперь вы можете сравнивать &str и OsString.

Подробности смотрите в примечаниях к выпуску.

Улучшения в Cargo

Также Cargo теперь будет автоматически пытаться починить Cargo.lock файлы, испорченные git mergeом. Выше мы уже описали две новые подкоманды Cargo. Это поведение можно отключить флагом --locked.

По умолчанию, cargo doc документирует только публичные части API, потому что предназначен для генерации пользовательской документации. cargo doc обзавелся новым флагом: --document-private-items. Но если вы работаете над своим пакетом и в нем есть внутренняя документация, то --document-private-items включит генерацию документации вообще для всего.

Подробности смотрите в примечаниях к выпуску.

Разработчики 1.29.0

29. Множество людей участвовало в разработке Rust 1. Спасибо! Мы не смогли бы завершить работу без участия каждого из вас.

От переводчика: Благодарю @Revertron за помощь в переводе.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

Тандем автора и эксперта: как сделать его эффективным?

В августе RUVDS и контент-студия Хабра провели семинар «Как мотивировать автора, даже если он программист». По итогам мы решили опубликовать некоторые интересные, на наш взгляд, доклады в нашем блоге. Журналисты писать умеют, но им нужна фактура. Эксперты обладают знаниями — ...

Мой любимый файл в кодовой базе Chromium

Код Хромиума весьма обширен, там каждому найдётся что-то по вкусу. А я вот решил рассказать о своём любимом файле в нём (а у вас есть такой?). Этот файл отражает всё: боль, разочарование, надежду, упорство, силу воли, ответственность за чужие провалы ...