Veröffentlichung von Release Rust 1.96.0 — einer weiteren stabilen Version der Programmiersprache Rust. Das Update erschien am 28. Mai 2026; es kann mit dem Standardbefehl rustup update stable installiert werden. Die Hauptänderungen sind neue Typen von Bereichen in core::range, die Stabilisierung von Makros zur Überprüfung der Übereinstimmung mit Mustern, die Verschärfung des Verhaltens von WebAssembly-Bauten und die Behebung von zwei Schwachstellen in Cargo.
Wesentliche Änderungen
Neue Typen von Bereichen core::range::Range*.
In der Standardbibliothek wurden neue Varianten von Bereichen stabilisiert: core::range::Range, RangeFrom, RangeInclusive und die zugehörigen Iteratoren. Im Gegensatz zu den alten Typen aus core::ops implementieren die neuen Bereiche Iterator nicht direkt, sondern werden über IntoIterator in einen Iterator umgewandelt. Dadurch können solche Bereiche Copy sein, was praktisch ist, z. B. wenn ein Bereich als Feld einer Struktur gespeichert wird. Die Syntax wie 0..1 erzeugt derzeit noch die alten Typen von Bereichen, soll aber in einer zukünftigen Sprachrevision auf die neuen Typen umgestellt werden.assert_matches! und debug_assert_matches! wurden hinzugefügt.
Die neuen Makros ermöglichen es, zu überprüfen, ob ein Wert einem bestimmten Muster entspricht. Sinnmäßig ähnelt dies assert!(matches!(…)), aber bei einem Fehler wird die Debug-Darstellung des Wertes ausgegeben, was die Diagnose erleichtert. Die Makros wurden nicht in das Prelude aufgenommen, um Konflikte mit beliebten Drittanbieter-Crates zu vermeiden, daher müssen sie explizit aus core oder std importiert werden.Das Verhalten der WebAssembly-Ziele wurde geändert.
Rust gibt dem Linker nicht mehr —allow-undefined für WebAssembly-Bauten an. Nun werden unbestimmte Symbole beim Linken als Fehler gewertet und nicht automatisch in Importe aus dem Modul "env" umgewandelt. Dies soll Fehler beim Bundlen und falsche Symbolnamen früher erkennen. Das alte Verhalten kann bei Bedarf über RUSTFLAGS=-Clink-arg=—allow-undefined wiederhergestellt oder das zu importierende wasm-Modul explizit über #[link(wasm_import_module = "env")] angegeben werden.Cargo hat sicherheitsrelevante Behebungen erhalten.
Änderungen in der Sprache.
Im Release enthalten sind einige gezielte Korrekturen und Erweiterungen: Die Übertragung von expr-Metavariablen von Makros in cfg wurde erlaubt, die Umwandlung von never-type in Tuple-Ausdrücken wurde angepasst, seltene Fälle von falschen Typausgabehinweisen für Funktionsargumente wurden korrigiert, der Support für Vektorregister s390x in Inline-Assembly wurde hinzugefügt, und es wurde erneut erlaubt, Konstanten vom Typ ManuallyDrop als Vorlagen zu verwenden – dies behebt eine Regression, die in Rust 1.94.0 aufgetreten ist.Änderungen im Compiler und Plattformen.
Für Linux-Ziele auf LoongArch wurde die Unterstützung für Link-Relaxation aktiviert – eine Verlinkungsoptimierung, die einige Sprünge und Verweise nach der Anordnung des Codes vereinfacht. Für riscv64gc-unknown-fuchsia wurde die Basis-Konfiguration auf das Profil RVA22 mit Unterstützung für Vektor-Erweiterungen aktualisiert.Aktualisierungen der Standardbibliothek.
Die Unterstützung für die Iteration über Bereiche von NonZero-Ganzzahlen wurde hinzugefügt. Zudem wurde die verzögerte Verarbeitung von Hostadressen in SGX über ToSocketAddr korrigiert, und in der Dokumentation sowie den internen Verträgen wurde die Definition von ‚lesbarem/schreibbarem‘ Speicher präzisiert: Nullzeiger ist aus der allgemeinen Definition ausgeschlossen, während Ausnahmen separat für bestimmte Methoden aufgeführt werden.Stabilisierte APIs.
Unter den stabilisierten Schnittstellen sind assert_matches!, debug_assert_matches!, Implementierungen von From für AssertUnwindSafe, LazyCell und LazyLock, sowie neue Typen und Bereichsiteratoren aus core::range, einschließlich Range, RangeFrom, RangeToInclusive und deren Iteratoren.Cargo: Änderungen für Abhängigkeiten und Dokumentation.
Jetzt kann eine Abhängigkeit gleichzeitig auf ein Git-Repository und ein alternatives Registry verweisen: lokal wird die Git-Version verwendet, und bei der Veröffentlichung die Version aus der Registry, ähnlich dem Verhalten mit crates.io. Zudem wurde die Unterstützung für target.’cfg(..)’.rustdocflags in der Cargo-Konfiguration hinzugefügt.Rustdoc hat die Dokumentation genauer verarbeitet.
Hinweise zu deprecated APIs werden jetzt als normale Dokumentation gerendert, ohne die frühere spezielle Verarbeitung durch white-space: pre-wrap. Außerdem gibt rustdoc keine lint missing_doc_code_examples mehr für Elemente innerhalb von impl aus, während in der Seitenleiste der Dokumentation Methoden und assoziierte Funktionen separat voneinander getrennt werden.Mögliche Inkompatibilitäten.
Im Release gibt es mehrere Änderungen, die sich bei nicht typischem Code auswirken können: Die Anordnung einiger #[repr(Int)] Enums wurde in extremen Fällen korrigiert, bestimmte unnötige unsize-Casts in Pin wurden verboten, WebAssembly-Bauten stürzen jetzt bei undefinierten Symbolen ab, der zufällig stabilisierte Attribut #![reexport_test_harness_main] ist wieder durch ein Feature-Gate gesperrt, der Parameter -Csoft-float wurde entfernt und die minimale Version des externen LLVM wurde auf 21 erhöht. Für AVR wurde der Typ c_double in f32 geändert, da C double auf diesen Zielen standardmäßig 32-Bit ist.
Quelle: linux.org.ru
