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

Краткая справочная карточка

Шпаргалка: команды под рукой

# ─── Build-скрипты ───
cargo build                          # Сначала компилирует build.rs, затем крейт
cargo build -vv                      # Подробный режим — показывает вывод build.rs

# ─── Кросс-компиляция ───
rustup target add x86_64-unknown-linux-musl
cargo build --release --target x86_64-unknown-linux-musl
cargo zigbuild --release --target x86_64-unknown-linux-gnu.2.17
cross build --release --target aarch64-unknown-linux-gnu

# ─── Бенчмаркинг ───
cargo bench                          # Запустить все бенчмарки
cargo bench -- parse                 # Запустить бенчмарки, в названии которых есть «parse»
cargo flamegraph -- --args           # Построить флеймграф по бинарнику
perf record -g ./target/release/bin  # Записать данные perf
perf report                          # Просмотреть данные perf в интерактивном режиме

# ─── Покрытие ───
cargo llvm-cov --html                # HTML-отчёт
cargo llvm-cov --lcov --output-path lcov.info
cargo llvm-cov --workspace --fail-under-lines 80
cargo tarpaulin --out Html           # Альтернативный инструмент

# ─── Проверка безопасности ───
cargo +nightly miri test             # Запустить тесты под Miri
MIRIFLAGS="-Zmiri-disable-isolation" cargo +nightly miri test
valgrind --leak-check=full ./target/debug/binary
RUSTFLAGS="-Zsanitizer=address" cargo +nightly test -Zbuild-std --target x86_64-unknown-linux-gnu

# ─── Аудит и цепочка поставок ───
cargo audit                          # Поиск известных уязвимостей
cargo audit --deny warnings          # Падать в CI при любой рекомендации
cargo deny check                     # Проверки лицензий, рекомендаций, запретов и источников
cargo deny list                      # Список всех лицензий в дереве зависимостей
cargo vet                            # Проверка доверия к цепочке поставок
cargo outdated --workspace           # Поиск устаревших зависимостей
cargo semver-checks                  # Обнаружение несовместимых изменений API
cargo geiger                         # Подсчёт unsafe в дереве зависимостей

# ─── Оптимизация бинарника ───
cargo bloat --release --crates       # Вклад каждого крейта в размер
cargo bloat --release -n 20          # 20 самых больших функций
cargo +nightly udeps --workspace     # Поиск неиспользуемых зависимостей
cargo machete                        # Быстрый поиск неиспользуемых зависимостей
cargo expand --lib module::name      # Посмотреть раскрытия макросов
cargo msrv find                      # Определить минимальную версию Rust
cargo clippy --fix --workspace --allow-dirty  # Автоисправление предупреждений линтеров

# ─── Оптимизация времени компиляции ───
export RUSTC_WRAPPER=sccache         # Общий кеш компиляции
sccache --show-stats                 # Статистика попаданий в кеш
cargo nextest run                    # Более быстрый запускатель тестов
cargo nextest run --retries 2        # Повторять нестабильные тесты

# ─── Платформенная инженерия ───
cargo check --target thumbv7em-none-eabihf   # Проверить сборку no_std
cargo build --target x86_64-pc-windows-gnu   # Кросс-компиляция под Windows
cargo xwin build --target x86_64-pc-windows-msvc  # Кросс-компиляция с ABI MSVC
cfg!(target_os = "linux")                    # cfg времени компиляции (даёт bool)

# ─── Релиз ───
cargo release patch --dry-run        # Предварительный просмотр релиза
cargo release patch --execute        # Повысить версию, закоммитить, поставить тег, опубликовать
cargo dist plan                      # Предварительный просмотр артефактов дистрибуции

Таблица решений: какой инструмент когда

ЗадачаИнструментКогда использовать
Встроить хеш git / информацию о сборкеbuild.rsБинарнику нужна прослеживаемость
Скомпилировать C-код из Rustкрейт cc в build.rsFFI к небольшим C-библиотекам
Сгенерировать код из схемprost-build / tonic-buildProtobuf, gRPC, FlatBuffers
Слинковать системную библиотекуpkg-config в build.rsOpenSSL, libpci, systemd
Статический бинарник для Linux--target x86_64-unknown-linux-muslРазвёртывание в контейнерах и облаке
Собрать под старую glibccargo-zigbuildСовместимость с RHEL 7, CentOS 7
Бинарник для ARM-сервераcross или cargo-zigbuildРазвёртывание на Graviton/Ampere
Статистические бенчмаркиCriterion.rsОбнаружение регрессий производительности
Быстрая проверка производительностиDivanПрофилирование во время разработки
Поиск горячих точекcargo flamegraph / perfКогда бенчмарк уже показал медленный код
Покрытие строк и ветвленийcargo-llvm-covПороги покрытия в CI, анализ пробелов
Быстрая проверка покрытияcargo-tarpaulinЛокальная разработка
Обнаружение UB в RustMiriЧистый Rust unsafe-код
Безопасность памяти при FFI с CValgrind memcheckСмешанные кодовые базы Rust/C
Обнаружение гонок данныхTSan или MiriКонкурентный unsafe-код
Обнаружение переполнения буфераASanunsafe арифметика указателей
Обнаружение утечекValgrind или LSanДолго работающие сервисы
Локальный аналог CIcargo-makeАвтоматизация рабочих сценариев разработчика
Проверки перед коммитомcargo-husky или git-хукиЛовить проблемы до push
Автоматические релизыcargo-release + cargo-distУправление версиями и дистрибуция
Аудит зависимостейcargo-audit / cargo-denyБезопасность цепочки поставок
Соответствие лицензиямcargo-deny (лицензии)Коммерческие и корпоративные проекты
Доверие к цепочке поставокcargo-vetСреды с высокими требованиями безопасности
Поиск устаревших зависимостейcargo-outdatedПлановое обслуживание
Обнаружение несовместимых измененийcargo-semver-checksПубликация библиотечных крейтов
Анализ дерева зависимостейcargo tree --duplicatesДедупликация и сокращение графа зависимостей
Анализ размера бинарникаcargo-bloatРазвёртывания с ограничением по размеру
Поиск неиспользуемых зависимостейcargo-udeps / cargo-macheteСокращение времени компиляции и размера
Настройка LTOlto = true или "thin"Оптимизация релизного бинарника
Бинарник, оптимизированный по размеруopt-level = "z" + strip = trueВстраиваемые системы / WASM / контейнеры
Аудит использования unsafecargo-geigerСоблюдение политики безопасности
Отладка макросовcargo-expandОтладка derive и macro_rules
Более быстрая линковкалинкер moldВнутренний цикл разработчика
Кеш компиляцииsccacheСкорость CI и локальных сборок
Более быстрые тестыcargo-nextestСкорость тестов в CI и локально
Соответствие MSRVcargo-msrvПубликация библиотек
Библиотека no_std#![no_std] + default-features = falseВстраиваемые системы, UEFI, WASM
Кросс-компиляция под Windowscargo-xwin / MinGWСборки Linux → Windows
Платформенная абстракция#[cfg] + паттерн с трейтамиКодовые базы для нескольких ОС
Вызовы API Windowswindows-sys / крейт windowsНативная функциональность Windows
Сквозной замер времениhyperfineБенчмарки всего бинарника, сравнение до и после
Property-based тестированиеproptestПоиск крайних случаев, устойчивость парсеров
Snapshot-тестированиеinstaПроверка больших структурированных выводов
Фаззинг с обратной связью по покрытиюcargo-fuzzПоиск падений в парсерах
Проверка моделей конкурентностиloomСтруктуры данных без блокировок, порядок атомарных операций
Тестирование комбинаций фичcargo-hackКрейты с несколькими фичами #[cfg]
Быстрые проверки UB (почти нативная скорость)cargo-carefulВорота безопасности в CI, легче Miri
Автопересборка при сохраненииcargo-watchВнутренний цикл разработчика, быстрая обратная связь
Документация воркспейсаcargo doc + rustdocПоиск API, онбординг, проверка ссылок в CI
Воспроизводимые сборки--locked + SOURCE_DATE_EPOCHПроверка целостности релиза
Настройка кеша CISwatinem/rust-cache@v2Сокращение времени сборки (с холодного старта → из кеша)
Политика линтов воркспейса[workspace.lints] в Cargo.tomlЕдиные линты Clippy и компилятора во всех крейтах
Автоисправление предупреждений линтеровcargo clippy --fixАвтоматическая очистка тривиальных проблем

Дополнительная литература

ТемаРесурс
Build-скрипты CargoКнига Cargo — Build Scripts
Кросс-компиляцияКросс-компиляция в Rust
Инструмент crosscross-rs/cross
cargo-zigbuildдокументация cargo-zigbuild
Criterion.rsРуководство по Criterion
Divanдокументация Divan
cargo-llvm-covcargo-llvm-cov
cargo-tarpaulinдокументация tarpaulin
MiriMiri на GitHub
Санитайзеры в Rustдокументация rustc по санитайзерам
cargo-makeкнига cargo-make
cargo-releaseдокументация cargo-release
cargo-distкнига cargo-dist
Оптимизация по профилю (PGO)Руководство Rust по PGO
Флеймграфыcargo-flamegraph
cargo-denyдокументация cargo-deny
cargo-vetдокументация cargo-vet
cargo-auditcargo-audit
cargo-bloatcargo-bloat
cargo-udepscargo-udeps
cargo-geigercargo-geiger
cargo-semver-checkscargo-semver-checks
cargo-nextestдокументация nextest
sccachesccache
Линкер moldmold
cargo-msrvcargo-msrv
LTOОпции генерации кода rustc
Профили CargoКнига Cargo — Profiles
no_stdEmbedded Book для Rust
Крейт windows-syswindows-rs
cargo-xwinдокументация cargo-xwin
cargo-hackcargo-hack
cargo-carefulcargo-careful
cargo-watchcargo-watch
Кеш Rust в CISwatinem/rust-cache
Книга по rustdocRustdoc Book
Условная компиляцияСправочник Rust — cfg
Встраиваемый RustAwesome Embedded Rust
hyperfinehyperfine
proptestproptest
instainsta — snapshot-тестирование
cargo-fuzzcargo-fuzz
loomloom — тестирование конкурентности

Создано как сопроводительный справочник к книгам «Паттерны Rust» и «Корректность на уровне типов».

Версия 1.3 — добавлены cargo-hack, cargo-careful, cargo-watch, cargo doc, воспроизводимые сборки, стратегии кеширования CI, итоговое упражнение и диаграмма зависимостей между главами для полноты.