Support de plateformes
Le nouveau tag 1.100.0 place i686-pc-windows-gnu en tier 2, ce qui signifie que le compilateur peut désormais produire des binaires sans nécessiter d’outils d’hôte spécifiques. Cette évolution réduit la friction pour les développeurs ciblant les environnements Windows 32 bits, tout en conservant la politique de test stricte de la tier 2. En parallèle, wasm32-wasip3 rejoint également la tier 2, élargissant la portée du WebAssembly vers les spécifications WASI P3, ce qui facilite l’adoption de Rust dans les environnements serveur sans système d’exploitation. Enfin, un nouveau tier 3, powerpc64-sony-ps3, est ajouté, offrant un support expérimental pour les consoles PlayStation 3 ; la classification tier 3 indique que la stabilité n’est pas garantie et que les contributions de la communauté seront essentielles.
Stabilisation des bibliothèques standard
Le crate alloc voit la stabilisation des allocateurs personnalisés, permettant aux applications de fournir leur propre implémentation d’allocation mémoire via le trait Allocator. Cette fonctionnalité, longtemps attendue, ouvre la porte à des stratégies d’allocation spécialisées, par exemple des allocateurs en temps réel ou à faible fragmentation, sans recourir à des bibliothèques externes. Par ailleurs, l’erreur système ENOTSUP est désormais mappée à ErrorKind::Unsupported, harmonisant la gestion des erreurs non supportées entre les plateformes POSIX et Windows. Enfin, un correctif de soundness a été appliqué à std::sys::pal::sgx::waitqueue::unsafe_list, éliminant une condition de course potentielle dans les environnements SGX, ce qui renforce la sûreté du code exécuté dans des enclaves sécurisées.
Évolutions de Cargo
Cargo introduit un système de lint interne : plusieurs avertissements, dont le nouveau cargo::unused_dependencies, sont exposés comme des lints configurables dans la table [lints.cargo]. Cette approche donne aux équipes la possibilité de faire appliquer des règles de propreté du Cargo.toml via le même mécanisme que les lints Rust, améliorant la maintenabilité des projets. Le même release ajoute les « dependency cooldowns », c’est‑à‑dire une configuration de « minimum publish age » qui empêche le résolveur de choisir des versions publiées trop récemment, sauf si elles sont déjà verrouillées dans Cargo.lock. Cette mesure limite les effets de « version churn » dans les pipelines CI. De plus, cargo install ignore désormais le flag --locked car le tarball .crate contient déjà le Cargo.lock correspondant, simplifiant les installations automatisées. Enfin, le répertoire de cache intermédiaire a été restructuré ; les outils qui scrutent directement le répertoire target doivent désormais s’appuyer sur les messages JSON de Cargo pour localiser les artefacts, car la disposition n’est plus une interface stable.
Modifications de compatibilité et impacts
Plusieurs changements de compatibilité peuvent déclencher des erreurs inattendues. Les fermetures (closures) capturent désormais uniquement les variables réellement utilisées dans les branches if let, ce qui peut introduire des erreurs de borrow-checker dans du code qui comptait sur une capture globale. Le type Infallible devient un alias de !, et le fallback du type never passe également à ! sur toutes les éditions, affectant les patrons de correspondance qui exploitaient l’ancien comportement. Les patterns de boîte (box patterns) sont interdits syntaxiquement, forçant les développeurs à recourir à des constructions alternatives. Les itérateurs min et max (et leurs variantes _by_key) utilisent désormais les méthodes Ord::cmp appropriées, ce qui ne change pas le résultat pour des implémentations correctes mais expose les implémentations incohérentes. Sur les cibles soft‑float x86, toute tentative d’activer SSE/AVX génère une erreur, renforçant la cohérence ABI. Enfin, la mise à jour du SDK WASI de la version 33 à 34 et le passage de l’Unicode à la version 18.0.0 assurent que les programmes Rust tirent profit des dernières spécifications de texte et d’interfaces système.