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

На 2 минуты тут, на много минут (суммарно) в других ситуациях.

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

На 2 минуты тут, на много минут (суммарно) в других ситуациях.

Ну, если их работа зключается в создании пректов, то да.

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

Мне очень нравится когда всё в одном месте. Поэтому я юзал эклипс, но он морально устарел, и большая часть фич мне всё равно была не нужна, лишь бы была удобная консоль вшита (а там дрянь). Qt Creator мне вполне нравится, тоже юзаю, но только в тех редких случаях, когда мне нужно Qt.

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

За которые ты уступил в конкурентной борьбе, просрал все полимеры и отправился в дом престарелых.

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

стабилизация процедурных макросов

non-lexical lifetimes (NLL).

омойбог. это будет эпично

CTO студии Ready at Dawn (список игр) сообщил, что студия переходит на Rust во всех новых проектах. План состоит в постепенной замене всех модулей на ржавые, с изначальным сохранением C API для интеграции со старыми модулями.

Так же, представитель R&D отдела Electronic Arts заявил что они используют Rust как основной язык уже 4-5 месяцев.

я просто оставлю это здесь

MyTrooName ★★★★★ ()

Решил сунуться в осиное гнездо?)

Virtuos86 ★★★★★ ()

можно было и про 1.28 немного вписать, а то отдельной новости не было

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

Другие ситуации - это другие фичи, которых нет в VSCode.

bbk123 ★★★★★ ()

Почему ещё никто не сказал, что раст ненужное гуано?

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

Решил сунуться в осиное гнездо?)

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

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

На 2 минуты тут, на много минут (суммарно) в других ситуациях.

Ну, если их работа зключается в создании пректов, то да.

Другие ситуации - это другие фичи

Но ты-то пожаловался на отсутствие конкретной фичи создания проекта.

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

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

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

Я программными средствами от JetBrains принцпиально не пользуюсь из-за отвращения, которое у меня вызывает эта фирма.

А текстовый редактор от Microsoft на Electron отвращения не вызывает? :D

Можно с уверенностью предположить, что отдельной «полноценной» (не знаю, что вы под этим понимаете) IDE для Rust не будет

Уже есть, и это IDEA, всё остальное и в подмётки не годится

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

Я подписан, да, но последнее время там никакой особой активности нет.

CYB3R ★★★★★ ()

А вот интересно, PyO3 будет работать со стабильным Rust 2018?

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

А почему должен не работать?

Да и даже если и есть сейчас какие-то нестыковки, то уверен что к моменту выпуска 1.31 их уберут - PyO3 важная штука, а про приход Rust2018 все в курсе.

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

нет, тут все правильно. Rust гарантирует, что память не будет испорчена, и только. От утечек, дедлоков и т.п. он не защищает, и защищать не будет. А во всех реальных проектах пишут так:

{ let mut lock_guard = mutex.lock(); }

operation_that_requires_mutex_to_be_unlocked();
- мутекс разблокируется при выходе переменной из области видимости, и все работает как положено

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

Такие вещи обычно держатся в .zsh_history&Co. Время от времени нужные сниппеты переезжают в ~/.local/bin/ или utils/ соответствующего проекта. В офисе Гугла в MV видел (описание) прикольной идеи с шаредным .history, но насколько оно работает не знаю, у резидентов спрашивать надо.

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

Странно вообще, что 'созданием проекта' занимается кто-то, кроме релиз-менеджера и админов, крутящих редмайн-геррит-дженкинс и создающих каналы коммуникации (списки рассылки и чятеги)

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

PyO3 требует 1.30-nightly. Да, очень может быть, что поддержат. Хочется надеяться.

dave ★★★★★ ()

Нравится больше всех остальных языков. Роста популярности и успеха проекту. Rust прекрасен.

anonymous ()

Для Rust уже есть нормальная IDE с автодополнением и проверкой эффективности кода? Как Idea для Java?

Deleted ()

Also, переписывается ли обучающая документация с выпуском новых версий? Или сначала ты выучишь руст 1.0, а потом будешь бегать по changelog'ам в поисках новых фич?

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

VSCode, конечно, не IDEA, но автодополнение, проверки кода с rls работают отлично (с Rust-плагином от разработчиков Rust).

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

Да, Rust Book постоянно обновляется. Например, Book на 2018 — https://doc.rust-lang.org/book/2018-edition/index.html. Но в Rust много вещей, которые книгой для начинающих не охватить, и документация тоже вся актуальная доступна (есть лишь одна проблема — гуголь любит искать по древним докам вместо новых)

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

Для Rust уже есть нормальная IDE с автодополнением и проверкой эффективности кода? Как Idea для Java?

А, все, почитал тред.

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

Идея умеет создавать проекты из GUI, но не особо нужная фича

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

History - это конечно хорошо, но оно не содержит описание выполненых команд, часть из которых могут быть ошибочными пробами.

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

Ага, а потом выяснится, что он тебе создаёт ещё и новый git репозиторий c .gitignore, а чтобы без него нужно добавить --vcs none. Но делать так будут не все, потому проще стереть .git/ и .gitignore руками, вместо того, вчитываться в cargo help new или гуглить. Полагаю, что таких подводных камней там ещё несколько.

И вообще, почему я должен отвлекаться на CLI не потому что я так хочу, а потому, что в этом вашем VSCode не реализовали базовую функциональность вменяемого IDE?

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

О да. Ты потратишь целых 2 секунды на снос гит-артефактов. Ужас.

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

этом вашем VSCode не реализовали базовую функциональность вменяемого IDE

Твоя проблема (одна из) в том, что ты считаешь создание проекта «базовой функциональностью».

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

Нет, я могу вообще их не заметить и получу репозиторий в репозитории.

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

Вовсе не моя проблема. Отсутствие вменяемого IDE - одна из причин маргинальности Rust. Полагаю, что при наличии нормального IDE популярность этого языка была бы выше.

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

этом вашем VSCode не реализовали базовую функциональность вменяемого IDE

Твоя проблема (одна из) в том, что ты считаешь создание проекта «базовой функциональностью».

Вовсе не моя проблема. Отсутствие вменяемого IDE - одна из причин маргинальности Rust.

А вторая проблема - непонимание письменного текста. Думаю, это как-то связано с нелюбовью к CLI %)

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

Это у тебя проблема с непониманием текста ;-)

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

Это у тебя проблема с непониманием текста ;-)

Это да.

tailgunner ★★★★★ ()

Язык для системного программирования?

Кинь сюда ассемблерный выхлоп примера main из ОП поста.

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

LOR не торт. Помнится в 2000 году тут больше народа было и отвечали через несколько секунд.

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

LOR давно сдулся. Былую тусовку проредили, а технические новости до уровня http://www.opennet.ru так и не доросли, поэтому их часто копируют от туда.

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

Отсутствие вменяемого IDE - одна из причин маргинальности Rust.

Хватит проецировать свои фантазии на реальный мир.

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

Хватит называть свой уютный мирок реальным миром. Достаточно большое число заинтересовавших в Rust новичков бросают его поигравшись с ним пару тройку месяцев. При наличии вменяемого IDE число бросивших Rust было бы меньше.

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

Хм... А можно посмотреть (на видео), как выглядит *работающее*?

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

Вопрос с ассемблерным выхлопом остаётся в силе.

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