Хочешь писать на Rust, но не знаешь в чём?

Нет денег на CLion или Intellij Ultimate, но тебе нужно отлаживать код?

Очень нравится Visual Studio Code, но при виде десятков плагинов разбегаются глаза?

Если на любой из вопросов выше ты ответил "да", то эта статья для тебя.


Disclaimer

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

На данный момент я использую CLion с плагином Intellij Rust

А, ну и это моя первая статья в принципе, так что любая критика и вопросы приветствуются.

Устанавливаем тулчейн

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

  1. Скачай и установи Инструменты сборки для Visual Studio отсюда:

    Листаем вниз до пункта "Инструменты для Visual Studio 2022"
    Листаем вниз до пункта "Инструменты для Visual Studio 2022"
    Нам нужная самая последняя кнопка, напротив "Инструменты сборки для Visual Studio 2022"
    Нам нужная самая последняя кнопка, напротив "Инструменты сборки для Visual Studio 2022"
    После запуска и некоторого ожидания откроется Visual Studio Installer
В нём нам нужен пункт "Разработка классических приложений на C++"
    После запуска и некоторого ожидания откроется Visual Studio Installer В нём нам нужен пункт "Разработка классических приложений на C++"

    При каждом запросе на перезагрузку - перезагружайся.

  2. Скачай и установи 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
В результате у тебя откроется vscode с твоим проектом
В результате у тебя откроется vscode с твоим проектом

Для того чтобы просто запустить - нажимай Run.

Для того чтобы запустить в режиме отладки - жми Debug.

Также можно создать launch.json через раздел Run and Debug (четвёртая иконка на боковой панели на скриншоте).

UPD1: Спасибо @TrueBersза поправку, что Better TOML устарел, и вместо него надо использовать Even Better TOML

Комментарии (35)


  1. dark_ruby
    16.01.2022 00:21
    +1

    хотелось бы плагин для VSCode умеющий упорядочивать import (use statement) так же легко и непренужденно как это сделано для TypeScript, JS и так далее


    1. vabka Автор
      16.01.2022 00:31

      В rust-analyzer есть функция для объединения импортов и удаления лишних.
      Или нужно что-то типа группировки и сортировки по алфавиту?


    1. denialex
      17.01.2022 10:44
      +1

      Возможно то что вы имели ввиду, как одна из опций rustfmt для файлов исходников: Reorder import and extern crate statements alphabetically in groups (a group is separated by a newline).

      Что касается форматирования файлов .toml то указаный в статье Even Better Toml это тоже может.


  1. ertaquo
    16.01.2022 00:55

    Попробовал недавно Rust, теперь интересно: как на нем действительно можно писать с комфортом? Куча кода просто генерируется через derive, этот сгенерированный код не подцепляется к анализу и автодополнению ни в плагине к VSCode, ни в плагине к IntelliJ.


    1. vabka Автор
      16.01.2022 01:19
      +5

      Похоже на баг.
      У меня нормально подсвечивается всё что приходит из дерайвов и макросов. (и с rust-analyzer и с Intellij-Rust)


      1. cy-ernado
        17.01.2022 12:01

        И даже https://github.com/diesel-rs/diesel подсвечивается? Ничего себе!

        А можете, пожалуйста, показать?


        1. vabka Автор
          17.01.2022 12:43

          Дизель не пробовал ещё. Сейчас попробую


        1. vabka Автор
          17.01.2022 16:04
          +1

          Было тяжело, но я завёл дизель.
          Правда не полностью — всё ещё хз как победить use of undeclared crate or module при derive(Insertable)

          Итог:
          в vscode есть подсветка дизелевского DSL-а для описания таблиц (который table!).
          Вероятно, это заслуга rust-analyzer.

          И в vscode и в intellij работает авто-импорт и автокомплит всего что там макросы нагенерили.


    1. Sulerad
      16.01.2022 12:28
      +1

      Основные случаи (derive из std и serde) плагины давно умеют обрабатывать специально и просто понимают что трейт как-то реализуется. Для более сложных случаев есть возможность экспериментально раскрывать proc-macro, но это работает не всегда и не совсем стабильно.


  1. IkaR49
    16.01.2022 01:18

    Для того чтобы просто запустить - нажимай Run.

    Для того чтобы запустить в режиме отладки - жми Debug.

    Также можно создать launch.json через раздел Run and Debug (четвёртая иконка на боковой панели на скриншоте).

    Хех. Вот как раз на этом у меня и был затык (не работает отладка, и с launch.json я так и не разобрался в принципе). А всё остальное, что описано - прекрасно очевидно из советов rustup-init и подсказок самого VS Code, когда впервые открываешь rust-проект.


    1. vabka Автор
      16.01.2022 01:21
      +1

      А как именно не работала отладка?
      У меня аналогичные проблемы были с официальным Rust-екстеншеном, а на r-a наоборот всё из коробки отлично работает.
      И launch.json и линза около main.


      1. IkaR49
        16.01.2022 01:49
        +1

        Просто берет и не работает. Отладчик нашелся, приложение запускается, но в обычном режиме выполнения. Глубже разбираться лень, он особо не нужен, да и от VS Code я в принципе ухожу уже.


        1. vabka Автор
          16.01.2022 02:00

          Магия, что тут сказать)

          У меня такое тоже было и решалось только полной чисткой всего и вся


        1. lostmsu
          16.01.2022 03:47
          +1

          Я, кстати, думал, что CLion будет лучше в качестве отладчика, взял пробную версию, но никаких преимуществ перед CodeLLDB не заметил.


  1. 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.


  1. RC_Cat
    16.01.2022 09:23
    +2

    А чтобы добавить ещё больше комфорта и удалить MSVC build tools который весит 4.2 Gb рекомендую установить Rust через MSYS2.

    А также это нужно тем кто хочет использовать Rust но не имеет лицензии на MSVC.


    1. trolley813
      16.01.2022 11:29

      Согласен, тянуть целую MSVC для этого (разработки на Rust) совсем не обязательно.


    1. vabka Автор
      16.01.2022 13:13

      Если я не ошибаюсь, если компилировать с msys, то тому кто захочет твоим приложением воспользоваться — придётся тоже ставить msys.

      PS: у меня он почему-то весит 5.2гб, вместо 4.2


      1. RC_Cat
        16.01.2022 15:20

        тому кто захочет твоим приложением воспользоваться — придётся тоже ставить

        Cygwin

        у меня он почему-то весит 5.2гб, вместо 4.4.2

        Удалите не используемое.


        1. vabka Автор
          16.01.2022 15:37

          Cygwin

          Немного не шарю. Если собирать с cygwin, то не потребителю не придётся его устанавливать? Не будет никаких зависимостей от всяких posix штук?


          1. TrueBers
            17.01.2022 10:15
            +2

            Если будет возможность слинковать статически, то не придётся. Например, HelloWorld слинковать можно.

            Но в серьёзных проектах такого почти не встретится, потому что GNU ABI предполагает динамическую линковку по умолчанию. Множество либ вообще не предназначено для статики. Натрахаетесь со всякими PIC, релоками, и прочими радостями линковки.

            Это всё -- если у вас нет рантайм ABI-bound взаимодействия, иначе -- много разнообразного секса будет.


    1. snuk182
      16.01.2022 13:49
      +1

      Двачую. Совершенно непонятно, почему на винде руступ предлагает по умолчанию msvc, а не mingw, который легкий и уже в комплекте.


      1. TrueBers
        17.01.2022 10:08
        +2

        Мб потому что в Винде используется Windows ABI, а не GNU'сный?

        Как вы предлагаете линковать либы, например, из современной SDK/WDK? Я вообще не уверен, что gnu бандл содержит адекватные хотя бы основные либы для виндовых фич. Последний раз, когда сталкивался пару лет назад, там было говно мамонта времён раннего pre SP3 Windows XP.

        Если вам достаточно gnu тулчейна, значит вы HelloWorld'ы компилите без внешних платформенных зависимостей. Ну или сраные блокчейны с бекендами, перекладывающими байтики, тоже вполне соберутся. А что-то полезное под современную 10/11 винду типа драйверов или системных утилит им никак не слинкуешь.

        gnu тулчейн под винду изначально создавался для кросс-компиляции, а не извращений.


        1. snuk182
          17.01.2022 12:15
          +1

          У меня есть большой проект на winapi. Есть проект поменьше на графику. Есть россыпь мелких проектов-библиотек. Ни в одном из них проблем с mingw нет. Возможно они появятся, если использовать непростые зависимости родных windows-библиотек. Но для этого нужно прям закапываться - Windows SDK собирается с mingw без видимых проблем. Требовать же целый msvc по умолчанию ради потенциальных "драйверов", когда вокруг 99% проектов - прикладные библиотеки, немного оверкилл.


          1. TrueBers
            18.01.2022 09:37

            Возможно, современная ситуация получше, но когда пару лет назад сталкивался, из своих проектов максимум 10% мог собрать gnu тулчейном без бубна.

            ПС. Сейчас погуглил. Похоже, что ситуация заметно лучше стала с появлением WLS, который явно поспособствовал развитию тулчейна. Во времена, когда я пытался, с этим был какой-то треш.


    1. TrueBers
      17.01.2022 10:28
      +1

      Да что ж всем так интересны сексуальные извращения.

      Как я написал в соседней ветке, gnu toolchain был создан в винде исключительно для кросскомпиляции. 4 гигабайта диска настолько дорого стоят, чтобы тратить нервы на боль и страдания?

      А также это нужно тем кто хочет использовать Rust но не имеет лицензии на MSVC.

      Для проектов с открытым кодом или команд до 5 человек лицензия на MSVC не нужна, что покрывает большинство потребностей.


  1. GinRummy
    16.01.2022 14:17

    Спасибо за гайд, актуальная для меня тема.

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

    Также, ждём-с Fleet


    1. vabka Автор
      16.01.2022 14:18
      +1

      Не знаю, на сколько он полумёртвый. Обновления периодически выходят.
      Перешёл из-за того что привык пользоваться intellij-based средами.

      Тоже жду fleet


    1. easimonenko
      16.01.2022 16:37

      Этот https://www.jetbrains.com/fleet/ аналог VSCode и Atom, только от JetBrains?


      1. vabka Автор
        16.01.2022 17:58
        +2

        По сути да, но по идее должен быть пощнее, ибо:

        1. Может использовать движок от идеи или других jb-сред

        2. Архитектура изначально предполагает совместную работу и/или запуск движка или вообще всей среды где-то в облаке или на удалённой машине.

        3. Никакого электрона


        1. easimonenko
          16.01.2022 18:04

          Ещё заметил, что Fleet базируется на LSP и в этом отношении больше похож на Emacs с lsp-mode.


  1. KReal
    16.01.2022 17:00

    VSCode работает с WSL2, так что теоретически можно поставить раст на убунту и не тащить MSVC.


    1. vabka Автор
      16.01.2022 18:34

      Да, можно. На это даже намекает один из вариантов ответа в опросе)
      Разница будет только на этапе установки тулчейна.


      1. KReal
        17.01.2022 01:27

        Ну просто был тред в комментариях, где люди ругались на размер MSVC)
        UPD: А опрос не увидел, май фолт)


  1. de-dup-i-dipi
    18.01.2022 20:49

    Еще бы новый файл автоматически ипортился в mod.rs при добавлении/предлагал добавить.