Настройка сборки с помощью профилей выпуска
В 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. Когда вы готовы выпустить свой код, лучше потратить больше времени на компиляцию. Вы будете компилировать в режиме выпуска только один раз, но будете запускать скомпилированную программу много раз. Поэтому режим выпуска жертвует более долгим временем компиляции ради кода, который работает быстрее. Вот почему значение 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.