veilletech.fr
13 nov. Feed du jour
#07 RUST Article

Rust 1.100 : type never stable, cooldown dans Cargo

Attendre trois jours avant d'adopter une crate tient en une ligne de config.

Rust 1.100 stabilise le type never (!) après dix ans, au prix d'un changement du type de repli dans les éditions antérieures à 2024. Cargo gagne un délai minimal avant d'adopter une version fraîchement publiée, une défense partielle contre les paquets piégés. L'API Allocator, DropGuard et un avertissement pour dépendances inutilisées complètent la version.

3 min de lectureintermédiairevidéo 1:15
Partager
Sommaire5 sections
  1. Ce qui se passe
  2. Le type never, et sa rupture
  3. Cargo : le délai de publication
  4. Le reste de la version
  5. À retenir

Ce qui se passe

Rust 1.100.0 est sorti le 12 novembre. Deux changements dépassent le cercle des habitués du langage : la stabilisation du type never, et un délai minimal de publication dans Cargo, qui écarte les versions trop fraîches.

Terminal
rustup update stable

Le type never, et sa rupture

Le type ! est celui des expressions qui ne produisent jamais de valeur : return, break, std::process::exit. Il se convertit en n'importe quel autre type, ce qui permet à une branche de match de sortir par un return sans casser le typage. On pouvait déjà l'écrire en type de retour (-> !) ; on peut désormais le nommer partout, par exemple Result<T, !> pour une erreur impossible. Il aura fallu dix ans et cinq tentatives de stabilisation.

Infallible devient un alias de !, ce qui rend compatibles toutes les API qui l'utilisaient. Le prix est une rupture : dans les éditions 2015, 2018 et 2021, le type de repli du never passe de () à !, comme c'était déjà le cas en édition 2024. L'effet est rare — typiquement, du code qui ignore le résultat d'une fonction dont le retour est un paramètre générique — et le compilateur peut détecter davantage de code inatteignable. Des avertissements de compatibilité étaient émis depuis longtemps, et des correctifs ont été publiés pour les crates publiques touchées : si une dépendance casse, mettez-la à jour avant de chercher plus loin.

Cargo : le délai de publication

Une version malveillante est souvent repérée en quelques heures ou quelques jours, par des analyseurs ou par la communauté. Cargo peut maintenant attendre cette fenêtre :

.cargo/config.tomlTOML
[registry]
global-min-publish-age = "3 days"

cargo update retient alors la version compatible la plus récente publiée depuis au moins trois jours, et affiche ce qu'il a laissé de côté avec l'âge de la version écartée. Pour une mise à jour urgente, une variable d'environnement lève le contrôle sur une seule commande :

Terminal
CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow cargo update clap --precise 4.6.9

La version forcée est inscrite dans Cargo.lock et y reste jusqu'au prochain cargo update qui la réévalue.

Les limites :

Le principe est le même que le cooldown arrivé dans Composer 2.11 (fiche du 4 novembre).

Le reste de la version

Source : Rust Blog, en anglais.