Rust : configuration commune



Même si chaque projet est différent, il y a tout de même quelques fondamentaux (qu'il m'arrive d'oublier).

Lints

Dans cargo.toml

[lints.rust]
unsafe_code = "forbid"

[lints.clippy]
enum_glob_use = "deny"
pedantic = "deny"
nursery = "deny"
unwrap_used = "deny"

Puis lancer cargo clippy ou mieux bacon clippy (cargo install bacon)

Journalisation

Ajout du crates mais désactive les journaux sur la release

cargo add tracing  --features release_max_level_off
tracing_subscriber::fmt().with_max_level(Level::DEBUG).init();
debug!("Path {path:?}");

Cache pour le build

# Installation
cargo install sccache
# Utilsation
RUSTC_WRAPPER=sccache cargo run

Optimisation du binaire

Dans cargo.toml, source

[profile.release]
opt-level = 'z'   # Optimize for size.
lto = true        # Enable Link Time Optimisation
codegen-units = 1 # Reduced to increase optimisations.
panic = 'abort'   # Abort on panic
strip = "symbols" # Strip symbols from binary

Autre

Pour lister les dépendences qui ne sont plus à jour :

cargo outdated -R
# Installé via la commande
cargo install cargo-outdated