LINUX.ORG.RU

Rust 1.29

 ,


3

6

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

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

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

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

cargo fix

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

fn do_something() {}

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

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

> 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

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

> 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 исправляет далеко не все предупреждения. Для своей работы cargo fix использует специальный API компилятора, который предлагает исправлять только те предупреждения, в которых мы абсолютно уверены. Со временем их список будет расширяться.

cargo clippy

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

Например:

let mut lock_guard = mutex.lock();

std::mem::drop(&lock_guard)

operation_that_requires_mutex_to_be_unlocked();

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

Установим предварительную версию 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

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

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

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

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

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

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

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

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

Улучшения в Cargo

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

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

>>> Примечания к выпуску

>>> Подробности



Проверено: jollheef ()
Последнее исправление: tailgunner (всего исправлений: 3)

Ответ на: комментарий от anonymous

правда качество работы этого самого rls, как и вообще всего протокола lsp оставляет желать лучшего.

Что RLS в текущем виде кривой это понятно, а что с самим LSP сильно плохо?

ozkriff
() автор топика
Ответ на: комментарий от ozkriff

Примерно ноль реализаций lsp работают как надо из коробки. Может быть разве что версия от самих мелкомягких для typescript, да и то, кажется они до сих пор не умеют автоимпорты делать.

anonymous
()
Ответ на: комментарий от anonymous

А почему вина на LSP протоколе, а не на конкретных языковых серверах? Уж автоимпорты он точно не должен мешать делать.

ozkriff
() автор топика
Последнее исправление: ozkriff (всего исправлений: 1)
Ответ на: комментарий от ozkriff

Делаю вывод на основе того, что я видел и пользовался специализированными тулзами для разных языков, которые *работают*, но все что связано с lsp *не работает*.

anonymous
()
Ответ на: комментарий от bbk123

Понятия не имею, не пишу на Rust. Твой пример с макро говорит только о том, что в vscode конкретный плагин для раста не допилен, не более того. Но про создание проектов — правда, такой фичи ни в одном плагине не видел и не искал, ибо мне не нужно.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Но выше заявлялось, что его пилят создатели самого Rust. А вот в плагине для IntelliJ переход на реализацию макро работает. Создание же проекта - это вообще одна из базовых функциональностей любого вменяемого IDE.

bbk123 ★★★★★
()
Ответ на: комментарий от northicewind

Неужели допилили или поддерживают лишь gdb? Раньше под Eclipse был другой плагин - RustDT, который уже больше года как брошен своим автором:

http://pureconcepture.blogspot.com/2017/07/goodbye-to-eclipse-end-of-era-for....
https://github.com/RustDT/RustDT

bbk123 ★★★★★
()
Последнее исправление: bbk123 (всего исправлений: 1)
Ответ на: комментарий от bbk123

Ну не допилили пока.

одна из базовых функциональностей любого вменяемого IDE

Всё так, но, возвращаясь к моему вопросу, разве это то критичное отличие, которое отделяет просто редактор от IDE? Не знаю как для раста, но для языков которые я юзаю, vscode умеет всё основное и важное, что должно уметь IDE.

WitcherGeralt ★★
()
Ответ на: комментарий от ozkriff

линтеры все еще полезны для отлова стилистических аномалий и логических косяков.

Всегда найдется невидимый логический косяк

kto_tama ★★★★★
()
Ответ на: комментарий от ozkriff

Раст не знаю, но вот это:

вызвали drop для ссылки на lock_guard, а не самого lock_guard. Вызов drop для ссылки имеет мало смысла и почти наверняка является ошибкой

смахивает на недоработку в типах по крайней мере.

anonymous
()
Ответ на: комментарий от bbk123

Ну запили, сделай пуш-реквест. Никому кроме тебя оно просто нафиг не упёрлось, иначе бы уже сделали. Это точно не настолько драматичное отличие, чтобы проводить разделительную черту между редактором и IDE.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Никому кроме тебя оно просто нафиг не упёрлось, иначе бы уже сделали.

Заведомо ложное утверждение.

bbk123 ★★★★★
()
Ответ на: комментарий от ozkriff

Intellij-rust поддерживает отладку, но только при установке на Clion. Получается вполне себе полноценная IDE для Раста, но платная, да.

CLion абсолютно неюзабелен. Бешеные тормоза, баги парсинга, какие-то махровые версии языка. Прям стыдно за jetbrains. Интересно, этот вот intellij-rust лучше или нет?

dimgel ★★★★★
()
Ответ на: комментарий от bbk123

Частота создания новых проектов не имеет никакого отношения к нашему обсуждению.

Она имеет отношение к нужности фичи «создать проект из IDE».

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Массой других факторов, например удобством. Ты врядли прокалываешь колёса своей машины слишком часто, однако это не уменьшает нужность шиномонтажа.

bbk123 ★★★★★
()
Ответ на: комментарий от bbk123

Нужность не измеряется частотой использования.

А чем же измеряется нужность?

Массой других факторов, например удобством

Не тем, насколько $FEATURE помогает в решении практических задач, а именно удобством? Ну окей.

tailgunner ★★★★★
()
Ответ на: комментарий от RazrFalcon

Что редактор

Нормальный редактор, по крайней мере минималистичный и нормально работает под вейландом в отличие от эклипса, базовые вещи умеет. Эклипс достал, пора было на что-то менять. Я ещё пытался Spacemacs, но не стал осиливать, слишком много пердолинга.

Поржал

Почему? Как я уже сказал, пересел на него недавно (1.5-2 недели назад), кроме отсутствующего (нерабочего) из коробки линтера, проблем не увидел. Значимую часть времени я пишу код в nano или gedit, у меня нет особой зависимости от фич IDE.

Ну, ок, назовёшь хорошее IDE, осиливающее одновременно несколько языков?

WitcherGeralt ★★
()
Ответ на: комментарий от tailgunner

Если $FEATURE позволяет удобно сделать то, что без $FEATURE делать неудобно и то, что хоть и не часто, но делать приходится, то $FEATURE определённо нужная.

bbk123 ★★★★★
()
Ответ на: комментарий от WitcherGeralt

VSCode в качестве IDE для C++ умеет хотя бы 1% фич QtCreator?

Ну, ок, назовёшь хорошее IDE, осиливающее одновременно несколько языков?

Критерии «хорошести» в студию.

Я рад, что вам нравится VSCode, но это не делает его менее убогим для моих задач.

RazrFalcon ★★★★★
()
Ответ на: комментарий от WitcherGeralt

Ты же сам сказал - это редактор. В редакторах текстов проекты не создают.

bbk123 ★★★★★
()
Ответ на: комментарий от WitcherGeralt

У него даже спелчека нет. О каких киллер-фичах ещё может идти речь?

PS: Я раньше использовал Sublime, но он лагает на 4k, поэтому пока использую kate. Преимуществ VSCode перед Kate для меня нет.

RazrFalcon ★★★★★
()
Ответ на: комментарий от bbk123

Ага. А если $FEATURE нужна раз в месяц, и для нее существует полноценная замена, то ее нужность где-то в районе нуля. Не равна нулю, но близка к нему. Есть $FEATURE поважнее, которые и будут реализовываться.

tailgunner ★★★★★
()
Ответ на: комментарий от RazrFalcon

умеет хотя бы 1% фич QtCreator?

Нет, и сравнивать смысла нет, тем более если пишешь на культях. <saahriktu_mode>Но не всем нужно столько фич</saahriktu_mode>.

Критерии «хорошести» в студию

Я минималист, мне и VSCode ок. Мне твоё личное мнение интересно.

это не делает его менее убогим для моих задач

А я его и не впариваю.

WitcherGeralt ★★
()
Ответ на: комментарий от tailgunner

Да уж, шаманство в CLI - полноценная замена. Ты наверное весь этот месяц держишь в голове все параметры cargo new, правда?

bbk123 ★★★★★
()
Ответ на: комментарий от bbk123

шаманство в CLI

фейспалм.жпг

Ты наверное весь этот месяц держишь в голове все параметры cargo new, правда?

Мне не влом раз в месяц почитать ман.

tailgunner ★★★★★
()
Ответ на: комментарий от RazrFalcon

О каких киллер-фичах ещё может идти речь?

«Киллер-фичей» я саркастично назван кнопку «создать проект».

Преимуществ VSCode перед Kate для меня нет

Для меня VSCode с плагинами вполне себе минималистичное IDE. А кейт всё же просто редактор, который нужен только когда в графическом файломенеджере по файликам клацаешь, разве нет?

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

Я предпочитаю IDE редакторам, если мне нужно писать код, а не скрипты править.

VSCode очень шустрый. Этого у него не отнять. Но зачем он мне - не ясно.

C++ - Qt Creator. Rust, Python - IDEA.

RazrFalcon ★★★★★
()
Ответ на: комментарий от bbk123

Пока ты читаешь ман другие уже давно создали проект и думают о куда более важных вещах.

Охренеть, они опередили меня на 2 минуты.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.