Tooling en Rust

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

  1. Instalar mold
  2. 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 debug_assertions 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.