- Das Stable-Release Rust 1.97.0 ändert, wie Symbole in Compiler-Artefakten erzeugt werden und wie Build-Warnungen verarbeitet werden; ein Update ist mit
rustup update stable möglich
- symbol mangling v0 ist nun der Stable-Standard und stellt auf ein Rust-spezifisches Schema für Symbolnamen um; das bisherige Verfahren auf Basis der Itanium ABI bewegt sich in Richtung Entfernung
- Cargo steuert Warnungen statt über
RUSTFLAGS=-Dwarnings nun über CARGO_BUILD_WARNINGS mit allow, warn und deny, wodurch sich CI- und lokale Build-Richtlinien leichter trennen lassen
- rustc zeigt Linker-Ausgaben auch bei erfolgreichem Linken als
linker_messages-Warnungen an; dieser Lint wird derzeit nicht von der Lint-Gruppe warnings beeinflusst
- Die Standardbibliothek enthält unter anderem
Default für RepeatN, Send für std::fs::File auf UEFI, Bit-Methoden für Integer und NonZero sowie die Stabilisierung von char::is_control in const-Kontexten
Rust 1.97.0 Update
- Rust 1.97.0 ist ein Stable-Release; wer Rust bereits mit
rustup installiert hat, kann mit folgendem Befehl aktualisieren
rustup update stable
- Falls
rustup nicht vorhanden ist, kann es über die rustup-Installationsseite der Rust-Website bezogen werden
- Die detaillierten Änderungen sind in den detailed release notes for 1.97.0 zusammengefasst
- Wer an Tests künftiger Releases teilnehmen möchte, kann mit
rustup default beta oder rustup default nightly den beta/nightly-Kanal verwenden; gefundene Bugs können im Rust issue tracker gemeldet werden
Geändertes Compile- und Build-Verhalten in Stable
-
symbol mangling v0 standardmäßig aktiviert
- Wenn Rust zu Objektdateien oder Binaries kompiliert wird, muss jedes Element wie Funktionen oder statics ein global eindeutiges symbol besitzen
- Um Kollisionen beim gemeinsamen Linken verschiedener Rust-Programme zu vermeiden, mangelt Rust den ursprünglichen Elementnamen und fügt Kontext wie Modulpfad, definierende Crate und Generics hinzu
- Das bisherige Mangling basierte auf der Itanium ABI, die teilweise auch in C++ verwendet wird
- Das neue Verfahren bewahrt die Instanziierungswerte generischer Parameter und reduziert Probleme, bei denen wegen Inkonsistenzen durch die nur teilweise genutzte Itanium ABI weiterhin Custom-Demangling nötig war
- Seit Rust 1.59 konnte das Rust-spezifische Mangling mit
-Csymbol-mangling-version=v0 gewählt werden; seit November 2025 gilt es auf nightly standardmäßig
- In Rust 1.97 wird dieses Verfahren zum Standard in Stable Rust; das Legacy-Mangling lässt sich nur noch auf nightly aktivieren
- Der aktuelle Plan ist, das Legacy-Mangling vollständig zu entfernen
- Weitere Details stehen im früheren Beitrag switching to v0 mangling on nightly
-
Warnungssteuerung in Cargo
- Warnungen in der CI als Build-Fehler zu behandeln, ist gängige Praxis; bisher wurde dafür üblicherweise
RUSTFLAGS=-Dwarnings verwendet
- Ab Rust 1.97 steuert Cargo die Beziehung zwischen Warnungen und Build-Erfolg direkt
allow: Warnungen ausblenden
warn: Standardwert, der Warnungen anzeigt, ohne den Build fehlschlagen zu lassen
deny: Warnungen ablehnen und als Build-Fehler behandeln
- Da das Verhalten über die Cargo-Konfiguration bestimmt wird, invalidiert diese Funktion den Standard-Build-Cache nicht
- Wenn man nach einem Refactoring während der Fehlerbehebung das Warnungsrauschen vorübergehend reduzieren möchte, kann man zum Beispiel Folgendes ausführen
CARGO_BUILD_WARNINGS=allow cargo check
- In der CI kann
CARGO_BUILD_WARNINGS=deny gesetzt werden, um Warnungen abzulehnen
- Zusammen mit
--keep-going lassen sich alle Fehler und Warnungen sammeln, ohne beim ersten fehlgeschlagenen Package anzuhalten
- Details zur Konfiguration finden sich in Cargos
build.warnings documentation
-
Linker-Ausgaben standardmäßig anzeigen
- rustc ruft im Auftrag der Nutzer den linker auf; bisher wurden Linker-Ausgaben standardmäßig verborgen, wenn das Linken erfolgreich war
- Ab Rust 1.97 werden linker messages standardmäßig angezeigt und als folgender warning lint ausgegeben
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- rustc filtert häufige linker messages heraus, die als False Positives oder beabsichtigtes Verhalten diagnostiziert wurden
- Nachdem diese Ausgaben auf nightly nicht mehr verborgen wurden, wurden mehrere Fehler behoben
- Derzeit ist
linker_messages ein spezieller Lint und wird nicht von der Lint-Gruppe warnings beeinflusst
- Üblicherweise kann rustc Linker-Ausgaben nicht präzise steuern, und die Ausgabe kann nur auf bestimmten Plattformen erscheinen
- Wenn es wie eine False-Positive-Ausgabe des Linkers aussieht, kann ein issue eingereicht werden
- Um die Warnung auszublenden, kann der Lint-Level auf
allow gesetzt werden; dazu lässt sich folgender lints-Abschnitt in Cargo.toml hinzufügen
[lints.rust]
linker_messages = "allow"
Stabilisierte APIs
- In Rust 1.97 wurden die folgenden APIs als stable stabilisiert
- Das bereits zuvor stabile
char::is_control ist nun auch im const context stable
Zugehörige Changelogs
- Die vollständigen Änderungen sind in den Changelogs von Rust, Cargo und Clippy zu finden
1 Kommentare
Lobste.rs-Meinungen
Dass Cargo in Rust 1.97 jetzt die Beziehung zwischen Warnungen und Build-Erfolg steuern kann, ist ein wirklich großartiges neues Feature
Wenn Warnungen beim Beheben von Fehlern nach einem Refactoring stören, kann man sie mit
CARGO_BUILD_WARNINGS=allow cargo checkvorübergehend ausblenden, und in CI kann man mitCARGO_BUILD_WARNINGS=denyWarnungen als Fehler behandeln. Zusammen mit--keep-goingkann man alle Fehler und Warnungen sammeln, statt beim ersten fehlgeschlagenen Paket stehenzubleibenEs könnte besser sein, mit dem Upgrade noch kurz zu warten. Es scheint einen Miscompile-Bug zu geben
https://github.com/rust-lang/rust/issues/159035
https://github.com/llvm/llvm-project/pull/208683
Cool. Ich frage mich, ob jemand hier den Fortschritt bei der Implementierung von Pattern Types zusammenfassen kann
Schade, der Never Type wurde auch diesmal nicht stabilisiert. Hoffentlich dann im nächsten Release