Модуль 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 вопроса