Rust 1.96.0

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.
    In Rust 1.96.0 wurden zwei Schwachstellen behoben, die Benutzer von Drittanbieter-Registries betreffen. CVE-2026-5223 beschĂ€ftigt sich mit der Verarbeitung von symlink innerhalb von tar-Archiven von Crates: Ein bösartiges Paket aus einer Drittanbieter-Registry konnte den Cache eines anderen Pakets aus derselben Registry ĂŒberschreiben. Ab Rust 1.96.0 lehnt Cargo Crate-Archive mit symlink ab. CVE-2026-5222 bezieht sich auf die Normalisierung von URL in spĂ€rlichen Registries und könnte unter bestimmten UmstĂ€nden dazu fĂŒhren, dass ein Cargo-Token an eine bösartige Registry gesendet wird. Benutzer von crates.io, so das Rust-Team, sind von diesen Problemen nicht betroffen.

  • Ä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

60GB SSD 8Gb DDR4