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
