$ sudo teach IT
Модуль 5 · Профили сборки

Профили dev и release

Профили сборки контролируют уровень оптимизации, отладочную информацию и другие параметры компиляции.

📖 Теория 🕐 ~20 минут
⚖️

dev vs release — два основных профиля

Параметр dev release
Команда cargo build cargo build --release
Оптимизация (opt-level) 0 (нет) 3 (максимум)
Отладочные символы (debug) true false
Скорость компиляции Быстро Медленно
Скорость программы Медленно Быстро (10-100x)
Размер бинарника Большой Меньше
LTO false false (по умолч.)
target/ структура
target/
├── debug/          ← cargo build (профиль dev)
│   └── my_app
└── release/        ← cargo build --release (профиль release)
    └── my_app
⚙️

Настройка профилей в Cargo.toml

Cargo.toml
[profile.dev]
opt-level = 0      # без оптимизации (0, 1, 2, 3, "s", "z")
debug = true       # отладочные символы
overflow-checks = true  # проверки переполнения

[profile.release]
opt-level = 3      # максимальная оптимизация
debug = false      # без отладочных символов
lto = true         # Link Time Optimization (медленнее компиляция, быстрее бинарник)
codegen-units = 1  # одна единица кодогенерации (медленнее, но лучше оптимизация)
strip = true       # удалить символы из бинарника (меньше размер)
opt-level 0 — нет, 1 — базовые, 2 — полные, 3 — агрессивные. "s" — размер, "z" — минимальный размер.
lto Link Time Optimization — оптимизирует весь граф зависимостей вместе. Медленнее компилирует, но быстрее работает.
strip Удалить отладочные символы и метаданные из бинарника. Значительно уменьшает размер.
codegen-units Сколько потоков компилирует крейт параллельно. 1 = медленнее компиляция, лучше оптимизация.
💥

panic — стратегия при панике

Cargo.toml
[profile.release]
panic = "abort"   # при панике — сразу завершить, без раскрутки стека

По умолчанию panic = "unwind" — раскручивает стек и вызывает деструкторы. "abort" — немедленное завершение, меньший размер бинарника. Подходит для встраиваемых систем.

📌 Что важно запомнить
→ dev: быстрая компиляция, медленный бинарник. release: медленная компиляция, быстрый бинарник
→ opt-level: 0..3, "s", "z" — уровень оптимизации
→ lto = true + codegen-units = 1 — максимальная оптимизация в release
→ strip = true — убрать символы, уменьшить размер бинарника

Тест

3 вопроса