Personalizando compilaciones con perfiles de lanzamiento

En Rust, los release profiles son perfiles predefinidos y personalizables con diferentes configuraciones que permiten a un programador tener más control sobre varias opciones para compilar código. Cada perfil se configura de forma independiente de los demás.

Cargo tiene dos perfiles principales: el perfil dev que Cargo usa cuando ejecutas cargo build y el perfil release que Cargo usa cuando ejecutas cargo build --release. El perfil dev está definido con buenos valores predeterminados para el desarrollo, y el perfil release tiene buenos valores predeterminados para las compilaciones de lanzamiento.

Estos nombres de perfil pueden ser familiares en la salida de tus compilaciones:

$ cargo build
    Finished dev [unoptimized + debuginfo] target(s) in 0.0s
$ cargo build --release
    Finished release [optimized] target(s) in 0.0s

El perfil dev y release son estos perfiles diferentes utilizados por el compilador.

Cargo tiene valores predeterminados para cada uno de los perfiles que se aplican cuando no has agregado explícitamente ninguna sección [profile.*] en el archivo Cargo.toml del proyecto. Al agregar secciones [profile.*] para cualquier perfil que desees personalizar, anularás cualquier subconjunto de los valores predeterminados. Por ejemplo, aquí están los valores predeterminados para la configuración opt-level para los perfiles dev y release:

Filename: Cargo.toml

[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3

El ajuste opt-level controla la cantidad de optimizaciones que Rust aplicará a tu código, con un rango de 0 a 3. Aplicar más optimizaciones extiende el tiempo de compilación, por lo que si estás en desarrollo y compilando tu código con frecuencia, querrás menos optimizaciones para compilar más rápido, incluso si el código resultante se ejecuta más lento. El opt-level predeterminado para dev es, por lo tanto, 0. Cuando estés listo para lanzar tu código, es mejor dedicar más tiempo a compilar. Solo compilarás en modo de lanzamiento una vez, pero ejecutarás el programa compilado muchas veces, por lo que el modo de lanzamiento intercambia un tiempo de compilación más largo por un código que se ejecuta más rápido. Es por eso que el opt-level predeterminado para el perfil release es 3.

Puedes anular un ajuste predeterminado agregando un valor diferente para él en Cargo.toml. Por ejemplo, si queremos usar el nivel de optimización 1 en el perfil de desarrollo, podemos agregar estas dos líneas al archivo Cargo.toml del proyecto:

Filename: Cargo.toml

[profile.dev]
opt-level = 1

Este código anula la configuración predeterminada de 0. Ahora, cuando ejecutemos cargo build, Cargo usará los valores predeterminados para el perfil dev más nuestra personalización de opt-level. Debido a que establecimos opt-level en 1, Cargo aplicará más optimizaciones que el valor predeterminado, pero no tantas como en una compilación de lanzamiento.

Para la lista completa de opciones de configuración y valores predeterminados para cada perfil, consulta la documentación de Cargo.