Retour aux articles
Rust 1.82 : les async closures arrivent enfin en stable
Dev15 août 20261 min de lecture

Rust 1.82 : les async closures arrivent enfin en stable

Rust 1.82 stabilise les async closures, une fonctionnalité attendue depuis des années. Retour sur ce changement de game-changer pour l'async Rust.

Rust 1.82, sorti le 14 août 2026, débloque enfin les async closures en stable, mettant fin à l'une des frictions les plus discutées dans la communauté Rust async.

Le problème avec les async closures

Jusqu'à présent, écrire une closure async en Rust nécessitait des contorsions :

// Avant
let f = |x: i32| async move { compute(x).await };
// Problème : le type de retour n'était pas clair pour le compilateur

Cette limitation obligeait souvent à définir une fonction nommée ou à utiliser Box<dyn Future>, ce qui perdait les bénéfices de performance de l'async sans allocation.

Async closures natives

Rust 1.82 introduit le trait AsyncFn et ses variantes (AsyncFnMut, AsyncFnOnce) qui permettent d'exprimer des closures async de façon naturelle :

async fn process<F: AsyncFn(i32) -> i32>(f: F) {
    let result = f(42).await;
}

process(async |x| x * 2).await;

Impact sur les frameworks async

Axum, Actix-web et Tokio peuvent maintenant exposer des APIs bien plus ergonomiques pour les handlers et middleware. Les handlers de route peuvent être des async closures directement, sans boilerplate.

Autres stabilisations

La release inclut aussi la stabilisation de offset_of! dans les types génériques et des améliorations au diagnostic du borrow checker pour les types impl Trait.

Cet article a été partiellement rédigé ou modifié à l'aide d'une intelligence artificielle.