Настройка сборки с помощью профилей выпуска
В Rust профили выпуска (release profiles) — это предопределённые, настраиваемые профили с различными конфигурациями, которые позволяют программисту более тонко контролировать различные параметры компиляции кода. Каждый профиль настраивается независимо от других.
В Cargo есть два основных профиля: профиль dev, который Cargo использует, когда вы выполняете cargo build, и профиль release, который Cargo использует при выполнении 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 имеет настройки по умолчанию для каждого из профилей, которые применяются, если вы не добавили явно никаких секций [profile.*] в файле Cargo.toml проекта. Добавляя секции [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. Когда вы готовы выпустить код, лучше потратить больше времени на компиляцию. Вы будете компилировать в режиме выпуска только один раз, но скомпилированную программу будете запускать много раз, поэтому режим выпуска (release) жертвует временем компиляции ради более быстрого выполнения кода. Вот почему значение opt-level по умолчанию для профиля release равно 3.
Вы можете переопределить настройку по умолчанию, добавив для неё другое значение в Cargo.toml. Например, если мы хотим использовать уровень оптимизации 1 в профиле разработки, мы можем добавить следующие две строки в файл Cargo.toml нашего проекта:
Файл: Cargo.toml
[profile.dev]
opt-level = 1
Этот код переопределяет значение по умолчанию 0. Теперь, когда мы запустим cargo build, Cargo будет использовать настройки по умолчанию для профиля dev плюс нашу пользовательскую настройку opt-level. Поскольку мы установили opt-level в 1, Cargo применит больше оптимизаций, чем по умолчанию, но не так много, как в сборке выпуска.
Для получения полного списка параметров конфигурации и их значений по умолчанию для каждого профиля см. документацию Cargo.