Skip to content
Tech AI Wire
Coding

Rust active son solveur de traits de nouvelle génération dans les builds nightly

3 min de lecture

Par Tech AI Wire Team

En chiffres

200+
GitHub issues fixed by the new solver, per the Rust team
~4 yrs
of active development before this switch
8x
faster on the datafusion crate, per the announcement
The Rust gear logo printed on a white card with a red metal gear lying in front of it

Le projet Rust a activé par défaut son solveur de traits de nouvelle génération dans les builds nightly le 22 août, le qualifiant de « plus grand changement unique apporté au compilateur Rust depuis sa version initiale ». L'annonce situe la stabilisation « dans les prochains mois » - autrement dit, le code de chaque développeur Rust passera bientôt par un cœur de compilateur réécrit, et le bon moment pour vérifier que le vôtre y survit, c'est maintenant, tant qu'un rapport de régression compte encore.

Ce que fait réellement le solveur de traits

Le solveur de traits est la partie du compilateur qui répond à la question la plus fréquente de Rust : ce type implémente-t-il ce trait ? Il prouve les clauses where, normalise les types associés et tranche les bornes de traits derrière presque chaque ligne de code générique. La couverture de LWN fait remonter l'effort à une décennie : une réimplémentation expérimentale nommée Chalk a débuté en 2015, et en 2023 le projet a décidé la réécriture devenue le solveur d'aujourd'hui.

Le nouveau solveur change aussi ce que le langage peut exprimer. LWN explique qu'il applique un raisonnement coinductif - que son auteur Daroc Alden décrit par contraste : « un cycle inductif est une boucle infinie, ou une fonction récursive sans cas de base. Un cycle coinductif... correspond plutôt à un générateur » - permettant des interfaces de traits autoréférentielles que l'ancien solveur ne pouvait tout simplement pas prouver. Selon LWN, ce traitement coinductif est volontairement limité à un petit ensemble d'autotraits comme Send.

Une décennie de travail

ÉtapeQuand
Chalk, première réimplémentation expérimentale2015
Décision de réécrire vers le solveur actuel2023
Nouveau solveur en stable - pour la seule vérification de cohérenceavant ce changement
Activé par défaut en nightly22 août 2026
Stabilisation prévue« dans les prochains mois »

L'ampleur est inhabituelle pour le remplacement d'un composant de compilateur : l'équipe Rust indique que le nouveau solveur corrige plus de 200 tickets GitHub accumulés contre l'ancien, et l'instantané de mars de LWN comptait 76 bugs ouverts et 78 fermés contre la nouvelle implémentation - une base de code testée au grand jour, pas une pièce de rechange finie.

Ce qui casse, et ce qui se débloque

L'équipe Rust est inhabituellement directe sur le coût : « C'est un changement incroyablement grand qui entraîne une quantité non triviale de casse. » Du code qui compile aujourd'hui cessera de compiler ; du code que l'ancien solveur rejetait à tort compile désormais. L'annonce cite le traitement modifié d'impl Trait en position de retour, de Type Alias Impl Trait et de Return Type Notation, plus une gestion plus correcte des types associés dans les types higher-ranked - supprimant des inférences de types erronées que l'ancien solveur laissait passer.

Le gain, selon l'annonce : retirer l'ancienne implémentation débloque Type Alias Impl Trait et Return Type Notation comme fonctionnalités stables, ouvre la porte à de nouvelles bornes de traits implicites par défaut, et permet à l'équipe de corriger les derniers défauts de sûreté connus du système de types. Il y a aussi des gains de performance - l'équipe cite la crate datafusion, compilée 8 fois plus vite avec le nouveau solveur.

Ce que cela signifie pour les développeurs

Si vous maintenez une crate Rust, faites-la tourner cette semaine sur le dernier nightly - rustup update nightly && cargo +nightly check est le test entier - et ouvrez un ticket pour toute régression. La demande de l'équipe est explicite : « Essayez le dernier nightly et ouvrez un ticket si vous rencontrez des bugs ou des régressions. » La casse signalée maintenant façonne la stabilisation ; celle découverte après l'arrivée en stable n'est plus que votre problème.

Si votre CI n'inclut pas déjà un job nightly, voici le plus fort argument depuis des années pour en ajouter un, même comme build consultatif non bloquant : un « plus grand changement depuis la 1.0 » qui atteint stable en quelques mois est exactement l'événement pour lequel ce canal existe.

Et si vous avez buté sur les murs de l'ancien solveur - des conceptions d'API riches en traits mortes sur des échecs d'inférence mystérieux, ou des blocages sur du code profondément générique - cela vaut la peine de retester précisément ces cas sur nightly. Entre la coinduction, les corrections des types associés et des gains de compilation comme celui de datafusion, certains contournements « Rust ne sait pas faire ça » de votre base de code viennent peut-être de devenir superflus.