1 points par GN⁺ 4 시간 전 | 1 commentaires | Partager sur WhatsApp
  • La version stable Rust 1.97.0 modifie la façon dont les symboles sont générés dans les artefacts de compilation ainsi que le flux de traitement des avertissements de build, et peut être installée avec rustup update stable
  • symbol mangling v0 devient la valeur par défaut en stable, passant à un schéma de noms de symboles propre à Rust, tandis que l’ancienne approche fondée sur l’ABI Itanium se dirige vers sa suppression
  • Cargo permet de contrôler les avertissements avec CARGO_BUILD_WARNINGS, en allow, warn ou deny, plutôt qu’avec RUSTFLAGS=-Dwarnings, ce qui facilite la séparation des politiques entre CI et builds locaux
  • rustc affiche désormais la sortie du linker, même lorsque l’édition de liens réussit, sous forme d’avertissement linker_messages ; ce lint n’est actuellement pas affecté par le groupe de lints warnings
  • La bibliothèque standard inclut la stabilisation de Default pour RepeatN, de Send pour std::fs::File sur UEFI, de méthodes de bits pour les entiers et NonZero, ainsi que de char::is_control en contexte const

Mise à jour Rust 1.97.0

  • Rust 1.97.0 est une version stable, et les utilisateurs ayant déjà installé Rust avec rustup peuvent la mettre à jour avec la commande suivante
rustup update stable
  • Si vous n’avez pas rustup, vous pouvez l’obtenir depuis la page d’installation de rustup sur le site de Rust
  • Les changements détaillés sont récapitulés dans les detailed release notes for 1.97.0
  • Pour participer aux tests des prochaines versions, vous pouvez utiliser les canaux beta/nightly avec rustup default beta ou rustup default nightly, et signaler les bugs trouvés dans le Rust issue tracker

Changements de comportement de compilation et de build en stable

  • Activation par défaut de symbol mangling v0

    • Lorsque Rust est compilé en fichiers objet ou en binaires, chaque élément comme une fonction ou un élément static doit disposer d’un symbole globalement unique
    • Pour éviter les collisions lors de l’édition de liens entre différents programmes Rust, Rust effectue un mangling des noms en ajoutant au nom d’origine des éléments du contexte comme le chemin de module, le crate de définition ou les génériques
    • Le mangling existant était fondé sur l’ABI Itanium, parfois également utilisée en C++
    • La nouvelle approche préserve les valeurs d’instanciation des paramètres génériques et réduit les problèmes dus aux incohérences d’une approche qui n’utilisait l’ABI Itanium qu’en partie, et qui nécessitait toujours un démangling personnalisé
    • Depuis Rust 1.59, il était possible de choisir le schéma de mangling propre à Rust avec -Csymbol-mangling-version=v0, et il est appliqué par défaut sur nightly depuis novembre 2025
    • Dans Rust 1.97, cette approche devient la valeur par défaut de Rust stable, et le mangling legacy ne peut plus être activé que sur nightly
    • Le plan actuel est de supprimer complètement le mangling legacy
    • Vous trouverez plus de détails dans l’ancien billet switching to v0 mangling on nightly
  • Contrôle des avertissements dans Cargo

    • Traiter les avertissements comme des échecs de build en CI est une pratique courante ; jusqu’ici, on utilisait généralement RUSTFLAGS=-Dwarnings
    • À partir de Rust 1.97, Cargo contrôle directement la relation entre les avertissements et la réussite du build
      • allow : masque les avertissements
      • warn : valeur par défaut, affiche les avertissements sans faire échouer le build
      • deny : refuse les avertissements et les traite comme un échec de build
    • Comme le comportement de cette fonctionnalité est déterminé par la configuration de Cargo, elle n’invalide pas le cache de build par défaut
    • Si vous voulez temporairement réduire le bruit des avertissements pendant que vous corrigez des erreurs après un refactoring, vous pouvez exécuter ceci
CARGO_BUILD_WARNINGS=allow cargo check
  • En CI, vous pouvez définir CARGO_BUILD_WARNINGS=deny pour refuser les avertissements
  • Utilisé avec --keep-going, cela permet de collecter toutes les erreurs et tous les avertissements sans s’arrêter au premier package en échec
  • Les détails de configuration se trouvent dans la build.warnings documentation de Cargo
  • Affichage par défaut de la sortie du linker

    • rustc appelle le linker pour le compte de l’utilisateur et, auparavant, masquait par défaut la sortie du linker lorsque l’édition de liens réussissait
    • À partir de Rust 1.97, les messages du linker sont affichés par défaut et sortent sous forme de warning lint comme ci-dessous
warning: linker stderr: ignoring deprecated linker optimization setting '1'
  |
  = note: `#[warn(linker_messages)]` on by default
  • rustc filtre les messages de linker courants diagnostiqués comme faux positifs ou comme comportements intentionnels
  • Après que cette sortie a cessé d’être masquée sur nightly, plusieurs défauts ont été corrigés
  • Actuellement, linker_messages est un lint spécial et n’est pas affecté par le groupe de lints warnings
  • Il est courant que rustc ne puisse pas contrôler finement la sortie du linker, et cette sortie peut n’apparaître que sur certaines plateformes
  • Si la sortie du linker semble être un faux positif, vous pouvez déposer une issue
  • Pour masquer l’avertissement, vous pouvez régler le niveau du lint sur allow, et ajouter la section lints suivante dans Cargo.toml
[lints.rust]
linker_messages = "allow"

API stabilisées

Journaux de changements associés

1 commentaires

 
GN⁺ 4 시간 전
Avis sur Lobste.rs
  • Le fait que Cargo puisse désormais, dans Rust 1.97, contrôler la relation entre les avertissements et la réussite du build est une très bonne nouveauté.
    Si les avertissements gênent pendant qu’on corrige des erreurs après un refactoring, on peut les masquer temporairement avec CARGO_BUILD_WARNINGS=allow cargo check, et dans la CI on peut faire échouer le build sur avertissement avec CARGO_BUILD_WARNINGS=deny. Utilisé avec --keep-going, cela permet de collecter toutes les erreurs et tous les avertissements sans s’arrêter au premier package en échec

  • Il vaut peut-être mieux repousser un peu la mise à niveau. Il semble y avoir un bug de mauvaise compilation.
    https://github.com/rust-lang/rust/issues/159035

    • Fait intéressant, cette mauvaise compilation était déjà présente depuis 10 releases, mais auparavant elle lisait légèrement hors limites, alors que maintenant elle semble lire bien plus loin, provoquant un segfault
    • C’était un bug LLVM. Heureusement, le correctif semble assez direct.
      https://github.com/llvm/llvm-project/pull/208683
  • Super. Je me demande s’il y a quelqu’un ici capable de résumer l’état d’avancement de l’implémentation des pattern types

  • Malheureusement, le never type n’a encore une fois pas été stabilisé. J’attends la prochaine release avec impatience

    • La blague disant que « le never type tire son nom de sa date de stabilisation » commence presque à s’essouffler
    • L’un des membres de l’équipe compilateur a fait une présentation sur le never type à RustWeek. Cela peut aider à mieux estimer les perspectives de stabilisation, donc je recommande de la regarder : https://www.youtube.com/watch?v=3jM4cnEVrLc