Курс по Rust — вторият, след Go

От Dorian Chávez, основател на Hábil и архитект на интеграции. Така обучаваме тези, които изграждат системи, които не могат да се провалят.

За кого е: за някой, който вече е завършил курса по Go и иска да разбере другия край на спектъра. Rust не се учи вместо Go: учи се след него, и така се разбира какво решение е взел всеки от двата.

Първо направи курса по Go. Това не е каприз: този курс приема за известни базовите понятия — променливи, функции, struct-ове, списъци, грешки — и се занимава с това, което Rust прави различно. Да започнеш оттук би означавало да учиш две трудни неща едновременно.

От какво имаш нужда: компютър с Linux Mint и завършен курс по Go. Урок 0 инсталира Rust от нулата.

Rust пуска нова версия на всеки шест седмици. Преди всяка сесия: rustup update stable. И ако един урок не казва за коя версия е написан, не му се доверявай: в Rust девет месеца са шест версии разлика, а това си личи.

Ще напишеш СЪЩАТА програма

revisor отново: получава списък със услуги, пита всичките едновременно, произвежда доклад.

Да напишеш същата програма два пъти е методът. Четенето на сравнения „Go срещу Rust“ не учи на нищо; борбата със същия проблем в двата езика учи. И ще откриеш, че това, което в Go ти отне един следобед, в Rust ти отнема три — докато разбереш защо, и тогава разбираш и двете неща.

Това, което никой не ти казва и което определя този курс

Rust има различна крива, не по-дълга: различна. Синтаксисът е лесен. Трудното е borrow checker-ът, компонентът на компилатора, който проверява кой е собственик на всяка данна. Ето какво обикновено разказват тези, които преподават и които учат Rust, като порядък и без претенция да е измерване:

  • Borrow checker-ът обикновено става интуитивен след няколко седмици практика. Не преди. Не е, че си бавен: този мисловен модел се изгражда, като се сблъскваш.
  • Много хора посвещават няколко седмици на основите, преди първия си истински проект.
  • Компилаторът на Rust е най-добрият учител, който съществува. Грешките му обясняват проблема, посочват реда и предлагат поправката. В Rust се учи, като се четат грешки, а не като се избягват.

И ето най-важната разлика с курса по Go: в Go стандартната библиотека стига за почти всичко. В Rust не: async, HTTP и сериализация живеят във външни crate-ове (tokio, reqwest, serde). Това не е липса — това е решението стандартът да е минимален и стабилен. Но означава, че тук ще използваш зависимости още от рано.

Деветте урока

Методът е този, който върши работа, измерено: прочиташ една глава от The Book, правиш упражненията ѝ от Rustlings и чак тогава продължаваш. Четенето на един дъх запазва много по-малко, макар да отнема същото време.

Урок The Book Какво изграждаш
0 Подготовка гл. 1 rustup, cargo и Rustlings
1 Основи гл. 2-3 типове, mut, контрол на потока
2 Ownership гл. 4 урокът, който решава всичко
3 Structs, enums и match гл. 5-6 моделът на revisor, с Option
4 Колекции и грешки гл. 8-9 Vec, HashMap, Result, ?
5 Trait-ове, generic типове и lifetime-ове гл. 10 trait-ът Revisor и generic типовете, и 'a, което плаши
6 Модули, тестове и cargo гл. 7, 11, 14 истинският проект
7 Конкурентност и async гл. 16-17 да проверява всичко едновременно
8 Завършената програма гл. 12 reqwest, serde, clap, бинарният файл

Ownership е в урок 2 и не може да се премести. Той е глава 4 на The Book поради една причина: всичко останало — struct-ове, колекции, грешки, конкурентност — се обяснява в термините на това кой на какво е собственик. Ако го прескочиш, следващите шест седмици са запаметяване на правила без смисъл.

Трите източника и как да ги комбинираш

  1. The Book — официална, 21 глави. Имаш я офлайн: rustup doc --book. За този курс: глави 1-12, 14 и 16-17.
  2. Rustlings — 95 интерактивни упражнения, много от тях насочени конкретно към borrow checker-а. cargo install rustlings. Редът има значение: глава, после нейните упражнения.
  3. Rust by Example — като бърза справка.

После, когато вече пишеш Rust, който работи: Rust for Rustaceans (Jon Gjengset) е книгата, към която се обръщат инженерите, които вече са минали този етап. Не по-рано: не върши работа като въведение.

Как да го използваш

  • Най-малко 90 минути на урок. Rust изисква повече седене от Go; с 60 не стига.
  • Чети грешките на компилатора цели. Не само първия ред. Rust ти казва проблема, причината и често точната поправка. Да пренебрегнеш това е да изхвърлиш най-добрия инструмент, който имаш.
  • cargo clippy от първия ден. Това е официалният linter и учи на идиоматичен Rust, докато работиш.
  • programas/ — всички програми от уроците, готови за компилиране и изпълнение, и пълният revisor с неговите тестове. Всяка се проверява автоматично при всяка промяна.
  • bitacora.md — тук има по-голямо значение, отколкото в Go: запиши всяка борба с borrow checker-а. Когато в урок 5 ги препрочетеш, ще видиш, че първите вече ти изглеждат очевидни. Това е моментът, в който е научено.

Уроци

  1. Урок 0 — Инсталиране на Rust в твоя Linux Mint
  2. Урок 1 — Основи
  3. Урок 2 — Ownership
  4. Урок 3 — Structs, enums и match
  5. Урок 4 — Колекции и грешки
  6. Урок 5 — Trait-ове, generic типове и lifetime-ове
  7. Урок 6 — Модули, тестове и Cargo
  8. Урок 7 — Конкурентност и async
  9. Урок 8 — Завършената програма