Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Инженерные практики Rust — за пределами cargo build

О проекте

  • Курс основан на оригинальных материалах Rust Training. Лицензии: MIT (код) и CC-BY-4.0 (текст).
  • Русский перевод и адаптация выполнены участниками проекта RustTraining-Rus.
  • Замечания и исправления присылайте через Issues и Pull Requests репозитория.

Практическое руководство по возможностям инструментария Rust, которые большинство команд открывают слишком поздно: build-скрипты, кросс-компиляция, бенчмаркинг, покрытие кода и проверка безопасности с помощью Miri и Valgrind. Каждая глава опирается на конкретные примеры из реального кода для диагностики оборудования — большого многокрейтового воркспейса, — поэтому каждый приём напрямую переносится в продакшн-код.

Как пользоваться этой книгой

Эта книга рассчитана на самостоятельное изучение или командные воркшопы. Каждая глава в значительной степени независима: читайте их по порядку или сразу переходите к нужной теме.

Обозначения сложности

СимволУровеньЗначение
🟢НачальныйПростые инструменты с понятными шаблонами — полезны с первого дня
🟡СреднийТребуют понимания внутреннего устройства инструментов или платформенных концепций
🔴ПродвинутыйГлубокое знание инструментов, nightly-функции или оркестрация нескольких инструментов

План изучения

ЧастьГлавыПримерное времяКлючевой результат
I — Сборка и поставкаch01–023–4 чМетаданные сборки, кросс-компиляция, статические бинарные файлы
II — Измерение и верификацияch03–054–5 чСтатистический бенчмаркинг, пороги покрытия, Miri и санитайзеры
III — Укрепление и оптимизацияch06–106–8 чБезопасность цепочки поставок, профили релиза, инструменты времени компиляции, no_std, Windows
IV — Интеграцияch11–133–4 чПродакшн-конвейер CI/CD, приёмы, итоговое упражнение
16–21 чПолный инженерный конвейер для продакшна

Работа с упражнениями

Каждая глава содержит 🏋️ упражнения с указанием сложности. Решения приведены в раскрывающихся блоках <details> — сначала попробуйте решить упражнение самостоятельно, а затем сверьтесь с решением.

  • Упражнения 🟢 обычно занимают 10–15 минут
  • Упражнения 🟡 требуют 20–40 минут и могут включать запуск инструментов локально
  • Упражнения 🔴 требуют серьёзной настройки и экспериментов (от одного часа)

Предварительные требования

КонцепцияГде изучить
Структура воркспейса CargoКнига по Rust, гл. 14.3
Флаги функций (feature flags)Справочник Cargo — Features
#[cfg(test)] и базовое тестированиеПаттерны Rust, гл. 12
Блоки unsafe и основы FFIПаттерны Rust, гл. 10

Карта зависимостей между главами

                 ┌──────────┐
                 │ ch00     │
                 │ Введение │
                 └────┬─────┘
        ┌─────┬───┬──┴──┬──────┬──────┐
        ▼     ▼   ▼     ▼      ▼      ▼
      ch01  ch03 ch04  ch05   ch06   ch09
      Сборка Бенч Покр Miri   Зав.   no_std
        │     │    │    │      │      │
        │     └────┴────┘      │      ▼
        │          │           │    ch10
        ▼          ▼           ▼   Windows
       ch02      ch07        ch07    │
       Кросс    Профиль     Профиль  │
        │          │           │     │
        │          ▼           │     │
        │        ch08          │     │
        │      Компил          │     │
        └──────────┴───────────┴─────┘
                   │
                   ▼
                 ch11
               CI/CD-конвейер
                   │
                   ▼
                ch12 ─── ch13
              Приёмы    Справка

Читать в любом порядке: ch01, ch03, ch04, ch05, ch06 и ch09 независимы друг от друга. Читать после необходимых предварительных глав: ch02 (нужна ch01), ch07–ch08 (выигрывают от ch03–ch06), ch10 (выигрывает от ch09). Читать в последнюю очередь: ch11 (связывает всё воедино), ch12 (приёмы), ch13 (справочник).

Аннотированное оглавление

Часть I — Сборка и поставка

№ГлаваСложностьОписание
1Build-скрипты — build.rs в деталях🟢Константы времени компиляции, компиляция C-кода, генерация protobuf, линковка системных библиотек, антипаттерны
2Кросс-компиляция — один исходник, много целей🟡Target triple, статические бинарные файлы на musl, кросс-компиляция для ARM, инструмент cross, cargo-zigbuild, GitHub Actions

Часть II — Измерение и верификация

№ГлаваСложностьОписание
3Бенчмаркинг — измеряем то, что важно🟡Criterion.rs, Divan, флеймграфы perf, PGO, непрерывный бенчмаркинг в CI
4Покрытие кода — видим то, что пропускают тесты🟢cargo-llvm-cov, cargo-tarpaulin, grcov, интеграция с Codecov/Coveralls в CI
5Miri, Valgrind и санитайзеры — проверка unsafe-кода🔴Интерпретатор MIR, Valgrind memcheck/Helgrind, ASan/MSan/TSan, cargo-fuzz, loom

Часть III — Укрепление и оптимизация

№ГлаваСложностьОписание
6Управление зависимостями и безопасность цепочки поставок🟢cargo-audit, cargo-deny, cargo-vet, cargo-outdated, cargo-semver-checks
7Профили релиза и размер бинарного файла🟡Устройство профиля релиза, компромиссы LTO, cargo-bloat, cargo-udeps
8Инструменты времени компиляции и разработки🟡sccache, mold, cargo-nextest, cargo-expand, cargo-geiger, линты воркспейса, MSRV
9no_std и проверка фич🔴cargo-hack, слои core/alloc/std, пользовательские обработчики паники, тестирование кода no_std
10Windows и условная компиляция🟡Паттерны #[cfg], крейты windows-sys/windows, cargo-xwin, абстракция платформы

Часть IV — Интеграция

№ГлаваСложностьОписание
11Собираем всё вместе — продакшн-конвейер CI/CD🟡Workflow GitHub Actions, cargo-make, pre-commit-хуки, cargo-dist, итоговый пример
12Проверенные на практике приёмы🟡10 проверенных паттернов: ловушка deny(warnings), настройка кэша, дедупликация зависимостей, RUSTFLAGS и другие
13Краткая справочная карточка—Команды под рукой, более 60 записей таблицы решений, ссылки на дополнительную литературу