Personalizar compilaciones con perfiles de lanzamiento

Beginner

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Bienvenido a Personalizando compilaciones con perfiles de lanzamiento. Esta práctica es parte del Rust Book. Puedes practicar tus habilidades de Rust en LabEx.

En esta práctica, exploraremos cómo personalizar los perfiles de lanzamiento de Rust agregando secciones [profile.*] al archivo Cargo.toml y reemplazando configuraciones predeterminadas como el opt-level para la optimización.


Skills Graph

Personalizando compilaciones con perfiles de lanzamiento

En Rust, los perfiles de lanzamiento 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 independientemente de los demás.

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

Es posible que estos nombres de perfil te resulten familiares a partir de 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

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

Cargo tiene configuraciones predeterminadas 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, reemplazas cualquier subconjunto de las configuraciones predeterminadas. Por ejemplo, aquí son los valores predeterminados para la configuración opt-level de los perfiles dev y release:

Nombre de archivo: Cargo.toml

[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3

La configuración opt-level controla el número de optimizaciones que Rust aplicará a tu código, con un rango de 0 a 3. Aplicar más optimizaciones se extiende el tiempo de compilación, por lo que si estás en desarrollo y compilas 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 lentamente. Por lo tanto, el opt-level predeterminado para dev es 0. Cuando estés listo para lanzar tu código, es mejor dedicar más tiempo a la compilación. Solo compilarás una vez en modo de lanzamiento, 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 reemplazar una configuración predeterminada agregando un valor diferente para ella 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 de nuestro proyecto:

Nombre de archivo: Cargo.toml

[profile.dev]
opt-level = 1

Este código reemplaza la configuración predeterminada de 0. Ahora, cuando ejecutamos cargo build, Cargo usará los valores predeterminados del 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 predeterminado, pero no tantas como en una compilación de lanzamiento.

Para ver la lista completa de opciones de configuración y valores predeterminados para cada perfil, consulta la documentación de Cargo en https://doc.rust-lang.org/cargo/reference/profiles.html.

Resumen

¡Felicidades! Has completado la práctica Personalizando compilaciones con perfiles de lanzamiento. Puedes practicar más prácticas en LabEx para mejorar tus habilidades.