Tooling en Rust
Índice
Para instalar podemos seguir la guía en la página oficial. A continuación un resumen.
Rustup
Para instalar rust lo primero que tenemos que hacer es instalar rustup. Este nos instala el lenguaje, cargo, y nos permite tener todo actualizado de forma sencilla con rustup update
. En definitiva nos sirve para gestionar todas las herramientas del ecosistema.
Hay que añadir la ruta donde se instala a nuestro PATH. En mi caso export PATH
"$HOME/.cargo/bin:$PATH"=.
Cargo
Nos sirve para todo… Compila, instala dependencias, crea proyectos, lanza tests, etc. Se configura con el archivo cargo.toml de forma local en un proyecto, y de forma global en ~/.cargo/config.toml
.
- Crear proyecto
cargo new nombre_proyecto
- Ejecutar el proyecto actual
cargo run
. Lanza el perfil por defecto (dev
) del proyecto en que nos encontremos - Compilar
cargo build
. Si queremos especificar un perfil,cargo build --nombre-del-perfil
cargo.toml
Los perfiles se definen como secciones con título [profile.nombredelperfil]
. Por defecto existe y se ejecuta el perfil dev
. Si queremos hacer algún cambio en él:
[profile.dev] debug = 0 strip = "debuginfo"
Dependencias se definen en sección [dependencies]
. Ejemplo:
[dependencies] uuid = "1.6.1"
Mejorar tiempos de compilación
Hay varias webs donde se explica todo esto, no pongo ningún enlace porque es información ubicua.
Cambio de linker a mold
- Instalar mold
Modificar configuración cargo a nivel global para que lo use
[target.x86_64-unknown-linux-gnu] linker = "/usr/bin/clang-16" rustflags = ["-C", "link-arg=--ld-path=/usr/bin/mold"]
Hay que ajustar la ubicación de clang (y su versión) y de mold.
Eliminar información de debuggeado
Ojo, si usamos debugger obviar este punto. Este cambio se realiza en el cargo.toml de nuestro proyecto.
[profile.dev] debug = 0 strip = "debuginfo"
Cuando vayamos a debugger podemos comentar y compilar, aunque tardará mucho la primera vez tras el cambio.
Enlazar crates de forma dinámica para evitar su recompilación
TODO
Cranelift
TODO
Qué comandos usar
Sí lo que queremos es ejecutar, sí hemos de hacer cargo run
.
Para hacer build en el perfil que estemos, cargo build
.
Pero muchas veces simplemente quiero comprobar si algún cambio afecta en otra parte del código. Con cargo check
sobre. Tenemos incluso cargo-watch, que ejecuta check ante cualquier cambio. Hace algo más, pero eso es lo que nos importa.
rustc
Enlace: Rustc book.
Optimización de código
Se usa el flag opt-level. Si usamos -o, es equivalente a -C opt-level=2.
0: sin optimización, las debugassertions funcionan. Valor por defecto. 1: optimizaciones básicas. 2: algunas optimizaciones (la que se pone si usamos -o). 3: todas las optimizaciones s: optimización para el tamaño del binario. z: optimización para el tamaño del binario., pero apago vectorización de bucles.