
Хочешь писать на Rust, но не знаешь в чём?
Нет денег на CLion или Intellij Ultimate, но тебе нужно отлаживать код?
Очень нравится Visual Studio Code, но при виде десятков плагинов разбегаются глаза?
Если на любой из вопросов выше ты ответил "да", то эта статья для тебя.
Disclaimer
Во многом эта статья обращена мне самому в прошлом, когда я долго мучался с настройкой vscode и плевался от кучи конфликтов и непонятных ошибок.
На данный момент я использую CLion с плагином Intellij Rust
А, ну и это моя первая статья в принципе, так что любая критика и вопросы приветствуются.
Устанавливаем тулчейн
Это самое простое, и при этом самое важное, без этого не получится собрать твой прекрасный код.
-
Скачай и установи Инструменты сборки для Visual Studio отсюда:
Листаем вниз до пункта "Инструменты для Visual Studio 2022" Нам нужная самая последняя кнопка, напротив "Инструменты сборки для Visual Studio 2022" После запуска и некоторого ожидания откроется Visual Studio Installer В нём нам нужен пункт "Разработка классических приложений на C++" При каждом запросе на перезагрузку - перезагружайся.
-
Скачай и установи rustup-init отсюда: https://rustup.rs/
При его запуске появится окно консоли со следующим содержанием:Welcome to Rust! This will download and install the official compiler for the Rust programming language, and its package manager, Cargo. Rustup metadata and toolchains will be installed into the Rustup home directory, located at: C:\Users\Vabka\.rustup This can be modified with the RUSTUP_HOME environment variable. The Cargo home directory located at: C:\Users\Vabka\.cargo This can be modified with the CARGO_HOME environment variable. The cargo, rustc, rustup and other commands will be added to Cargo's bin directory, located at: C:\Users\Vabka\.cargo\bin This path will then be added to your PATH environment variable by modifying the HKEY_CURRENT_USER/Environment/PATH registry key. You can uninstall at any time with rustup self uninstall and these changes will be reverted. Current installation options: default host triple: x86_64-pc-windows-msvc default toolchain: stable (default) profile: default modify PATH variable: yes 1) Proceed with installation (default) 2) Customize installation 3) Cancel installation >1
Тут тебе ничего не надо менять - просто пиши 1 и жми [Enter].
После этого тебе установится cargo и rustc, с помощью которых ты сможешь собирать код из консоли.
Устанавливаем и настраиваем Visual Studio Code
Предположим, что ты уже установил vs code: https://code.visualstudio.com/
Теперь нам нужно научить его работать с Rust, это делается при помощи расширений.
Нам понадобятся расширения для подсветки синтаксиса и автодополнений, отладки, и что-то ещё для комфортного редактирования cargo.toml.
Для подсветки синтаксиса и автодополнений есть два наиболее популярных расширения: Rust и rust-analyzer. Они работают немного по-разному и конфликтуют между собой. Я не буду глубоко разбирать, в чём у них различия, но rust-analyzer работает лучше, потому берём его.
Для отладки устанавливаем CodeLLDB.
Для работы с toml ставим Even Better TOML (для подсветки), crates (для удобного обновления зависимостей), и crates completer (для автодополнения имён пакетов и версий)
Также, тебе может пригодится Test Explorer UI и Rust Test Explorer для того чтобы запускать тесты из боковой панели, а не из консоли.
Проверяем всё вместе
Создаём пустой проект в консоли
mkdir rust-demo # создаём папку rust-demo
cd rust-demo # переходим в неё
cargo init # инициализируем в ней минимальный проект
code . ./src/main.rs # открываем vscode

Для того чтобы просто запустить - нажимай Run.
Для того чтобы запустить в режиме отладки - жми Debug.
Также можно создать launch.json через раздел Run and Debug (четвёртая иконка на боковой панели на скриншоте).
UPD1: Спасибо @TrueBersза поправку, что Better TOML устарел, и вместо него надо использовать Even Better TOML
Комментарии (35)
ertaquo
16.01.2022 00:55Попробовал недавно Rust, теперь интересно: как на нем действительно можно писать с комфортом? Куча кода просто генерируется через derive, этот сгенерированный код не подцепляется к анализу и автодополнению ни в плагине к VSCode, ни в плагине к IntelliJ.
vabka Автор
16.01.2022 01:19+5Похоже на баг.
У меня нормально подсвечивается всё что приходит из дерайвов и макросов. (и с rust-analyzer и с Intellij-Rust)cy-ernado
17.01.2022 12:01И даже https://github.com/diesel-rs/diesel подсвечивается? Ничего себе!
А можете, пожалуйста, показать?
vabka Автор
17.01.2022 16:04+1Было тяжело, но я завёл дизель.
Правда не полностью — всё ещё хз как победить use of undeclared crate or module при derive(Insertable)
Итог:
в vscode есть подсветка дизелевского DSL-а для описания таблиц (который table!).
Вероятно, это заслуга rust-analyzer.
И в vscode и в intellij работает авто-импорт и автокомплит всего что там макросы нагенерили.
Sulerad
16.01.2022 12:28+1Основные случаи (derive из std и serde) плагины давно умеют обрабатывать специально и просто понимают что трейт как-то реализуется. Для более сложных случаев есть возможность экспериментально раскрывать proc-macro, но это работает не всегда и не совсем стабильно.
IkaR49
16.01.2022 01:18Для того чтобы просто запустить - нажимай Run.
Для того чтобы запустить в режиме отладки - жми Debug.
Также можно создать launch.json через раздел Run and Debug (четвёртая иконка на боковой панели на скриншоте).
Хех. Вот как раз на этом у меня и был затык (не работает отладка, и с launch.json я так и не разобрался в принципе). А всё остальное, что описано - прекрасно очевидно из советов rustup-init и подсказок самого VS Code, когда впервые открываешь rust-проект.
vabka Автор
16.01.2022 01:21+1А как именно не работала отладка?
У меня аналогичные проблемы были с официальным Rust-екстеншеном, а на r-a наоборот всё из коробки отлично работает.
И launch.json и линза около main.IkaR49
16.01.2022 01:49+1Просто берет и не работает. Отладчик нашелся, приложение запускается, но в обычном режиме выполнения. Глубже разбираться лень, он особо не нужен, да и от VS Code я в принципе ухожу уже.
vabka Автор
16.01.2022 02:00Магия, что тут сказать)
У меня такое тоже было и решалось только полной чисткой всего и вся
lostmsu
16.01.2022 03:47+1Я, кстати, думал, что CLion будет лучше в качестве отладчика, взял пробную версию, но никаких преимуществ перед CodeLLDB не заметил.
TrueBers
16.01.2022 07:32+17Хабр -- для аутистов!
Когда будут туториалы "Как включить компьютер", "Как установить Виндавс"?
Если уж на то пошло, то советуйте
Even Better TOML
вместоBetter TOML
, который заброшен и не поддерживается уж 4 года как.Для подсветки синтаксиса и автодополнений есть два наиболее популярных расширения: Rust и rust-analyzer. Они работают немного по-разному и конфликтуют между собой. Я не буду глубоко разбирать, в чём у них различия, но rust-analyzer работает лучше, по тому берём его.
Различия у них в том, что
vscode-rust
больше года назад забросили, а позже вообще объявилиdeprecated
вRFC2912
. Оно не "плохо работает", оно вообще больше не разрабатывается.rust-analyzer
ожидается в stable toolchain вместоRLS
.
RC_Cat
16.01.2022 09:23+2А чтобы добавить ещё больше комфорта и удалить MSVC build tools который весит 4.2 Gb рекомендую установить Rust через MSYS2.
А также это нужно тем кто хочет использовать Rust но не имеет лицензии на MSVC.
trolley813
16.01.2022 11:29Согласен, тянуть целую MSVC для этого (разработки на Rust) совсем не обязательно.
vabka Автор
16.01.2022 13:13Если я не ошибаюсь, если компилировать с msys, то тому кто захочет твоим приложением воспользоваться — придётся тоже ставить msys.
PS: у меня он почему-то весит 5.2гб, вместо 4.2RC_Cat
16.01.2022 15:20тому кто захочет твоим приложением воспользоваться — придётся тоже ставить
Cygwin
у меня он почему-то весит 5.2гб, вместо 4.4.2
Удалите не используемое.
vabka Автор
16.01.2022 15:37Cygwin
Немного не шарю. Если собирать с cygwin, то не потребителю не придётся его устанавливать? Не будет никаких зависимостей от всяких posix штук?TrueBers
17.01.2022 10:15+2Если будет возможность слинковать статически, то не придётся. Например, HelloWorld слинковать можно.
Но в серьёзных проектах такого почти не встретится, потому что GNU ABI предполагает динамическую линковку по умолчанию. Множество либ вообще не предназначено для статики. Натрахаетесь со всякими PIC, релоками, и прочими радостями линковки.
Это всё -- если у вас нет рантайм ABI-bound взаимодействия, иначе -- много разнообразного секса будет.
snuk182
16.01.2022 13:49+1Двачую. Совершенно непонятно, почему на винде руступ предлагает по умолчанию msvc, а не mingw, который легкий и уже в комплекте.
TrueBers
17.01.2022 10:08+2Мб потому что в Винде используется Windows ABI, а не GNU'сный?
Как вы предлагаете линковать либы, например, из современной SDK/WDK? Я вообще не уверен, что gnu бандл содержит адекватные хотя бы основные либы для виндовых фич. Последний раз, когда сталкивался пару лет назад, там было говно мамонта времён раннего pre SP3 Windows XP.
Если вам достаточно gnu тулчейна, значит вы HelloWorld'ы компилите без внешних платформенных зависимостей. Ну или сраные блокчейны с бекендами, перекладывающими байтики, тоже вполне соберутся. А что-то полезное под современную 10/11 винду типа драйверов или системных утилит им никак не слинкуешь.
gnu тулчейн под винду изначально создавался для кросс-компиляции, а не извращений.
snuk182
17.01.2022 12:15+1У меня есть большой проект на winapi. Есть проект поменьше на графику. Есть россыпь мелких проектов-библиотек. Ни в одном из них проблем с mingw нет. Возможно они появятся, если использовать непростые зависимости родных windows-библиотек. Но для этого нужно прям закапываться - Windows SDK собирается с mingw без видимых проблем. Требовать же целый msvc по умолчанию ради потенциальных "драйверов", когда вокруг 99% проектов - прикладные библиотеки, немного оверкилл.
TrueBers
18.01.2022 09:37Возможно, современная ситуация получше, но когда пару лет назад сталкивался, из своих проектов максимум 10% мог собрать gnu тулчейном без бубна.
ПС. Сейчас погуглил. Похоже, что ситуация заметно лучше стала с появлением WLS, который явно поспособствовал развитию тулчейна. Во времена, когда я пытался, с этим был какой-то треш.
TrueBers
17.01.2022 10:28+1Да что ж всем так интересны сексуальные извращения.
Как я написал в соседней ветке, gnu toolchain был создан в винде исключительно для кросскомпиляции. 4 гигабайта диска настолько дорого стоят, чтобы тратить нервы на боль и страдания?
А также это нужно тем кто хочет использовать Rust но не имеет лицензии на MSVC.
Для проектов с открытым кодом или команд до 5 человек лицензия на MSVC не нужна, что покрывает большинство потребностей.
GinRummy
16.01.2022 14:17Спасибо за гайд, актуальная для меня тема.
Такой вопрос - Насколько сильно отличается работа в силайн от вскода и почему все же решил перейти на платное решение? Я слышал версию от знакомого раст-разработчика, что в силайне плагин полумертвый.
Также, ждём-с Fleet
vabka Автор
16.01.2022 14:18+1Не знаю, на сколько он полумёртвый. Обновления периодически выходят.
Перешёл из-за того что привык пользоваться intellij-based средами.
Тоже жду fleet
easimonenko
16.01.2022 16:37Этот https://www.jetbrains.com/fleet/ аналог VSCode и Atom, только от JetBrains?
vabka Автор
16.01.2022 17:58+2По сути да, но по идее должен быть пощнее, ибо:
Может использовать движок от идеи или других jb-сред
Архитектура изначально предполагает совместную работу и/или запуск движка или вообще всей среды где-то в облаке или на удалённой машине.
Никакого электрона
easimonenko
16.01.2022 18:04Ещё заметил, что Fleet базируется на LSP и в этом отношении больше похож на Emacs с lsp-mode.
KReal
16.01.2022 17:00VSCode работает с WSL2, так что теоретически можно поставить раст на убунту и не тащить MSVC.
de-dup-i-dipi
18.01.2022 20:49Еще бы новый файл автоматически ипортился в mod.rs при добавлении/предлагал добавить.
dark_ruby
хотелось бы плагин для VSCode умеющий упорядочивать import (use statement) так же легко и непренужденно как это сделано для TypeScript, JS и так далее
vabka Автор
В rust-analyzer есть функция для объединения импортов и удаления лишних.
Или нужно что-то типа группировки и сортировки по алфавиту?
denialex
Возможно то что вы имели ввиду, как одна из опций rustfmt для файлов исходников: Reorder import and extern crate statements alphabetically in groups (a group is separated by a newline).
Что касается форматирования файлов .toml то указаный в статье Even Better Toml это тоже может.