Профили сборки
В Rust профили сборки (release profiles) — это заранее определённые настраиваемые профили с разными конфигурациями, которые дают программисту больше контроля над параметрами компиляции кода. Каждый профиль настраивается независимо от остальных.
У Cargo два основных профиля: dev, который используется при cargo build, и
release, который используется при cargo build --release. У профиля dev
настройки по умолчанию хорошо подходят для разработки, а у release — для
сборки релизов.
Эти имена профилей могут быть вам знакомы по выводу сборки:
$ cargo build
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
$ cargo build --release
Finished `release` profile [optimized] target(s) in 0.32s
dev и release — это и есть разные профили, которые использует компилятор.
Для каждого профиля у Cargo есть настройки по умолчанию, которые действуют,
пока вы явно не добавили в Cargo.toml проекта секции [profile.*]. Добавив
секцию [profile.*] для профиля, который хотите настроить, можно
переопределить любую часть настроек по умолчанию. Например, вот значения
настройки opt-level по умолчанию для профилей dev и release:
Файл: Cargo.toml
[profile.dev]
opt-level = 0
[profile.release]
opt-level = 3
Настройка opt-level управляет тем, сколько оптимизаций Rust применит к
коду, — от 0 до 3. Чем больше оптимизаций, тем дольше компиляция. Поэтому во
время разработки, когда код компилируется часто, лучше меньше оптимизаций —
пусть компиляция будет быстрее, даже если итоговый код работает медленнее.
Поэтому opt-level по умолчанию для dev равен 0. А когда код готов к
выпуску, на компиляцию лучше потратить больше времени: в режиме релиза вы
скомпилируете программу один раз, а запускать будете много раз. Режим релиза
жертвует временем компиляции ради более быстрого кода. Поэтому opt-level по
умолчанию для профиля release равен 3.
Настройку по умолчанию можно переопределить, указав другое значение в Cargo.toml. Например, если в профиле разработки мы хотим использовать уровень оптимизации 1, добавим в Cargo.toml проекта две строки:
Файл: Cargo.toml
[profile.dev]
opt-level = 1
Этот код переопределяет значение по умолчанию 0. Теперь cargo build будет
использовать настройки профиля dev по умолчанию плюс нашу настройку
opt-level. Раз мы задали opt-level равным 1, Cargo применит больше
оптимизаций, чем по умолчанию, но не столько, сколько при сборке релиза.
Полный список параметров и их значения по умолчанию для каждого профиля — в документации Cargo.