Rust 1.96.0

Die Veröffentlichung ist Rust 1.96.0 — die nächste stabile Version der Programmiersprache Rust. Das Update wurde veröffentlicht am 28. Mai 2026.; installiert werden kann es mit dem Standardbefehl rustup update stable. Die wichtigsten Änderungen umfassen neue Bereichstypen in core::range, die Stabilisierung von Makros zur Musterübereinstimmung, die Verschärfung des Verhaltens von WebAssembly-Bauten und die Behebung von zwei Schwachstellen in Cargo.

Wesentliche Änderungen

  • Neue Bereichstypen 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 nicht direkt Iterator, sondern werden über IntoIterator in einen Iterator umgewandelt. Dadurch können diese Bereiche Copy-variabel sein, was beispielsweise nützlich ist, wenn man einen Bereich als Feld in einer Struktur speichert. Der Syntax wie 0..1 erzeugt momentan noch die alten Bereichstypen, aber in einer zukünftigen Sprachversion ist vorgesehen, ihn auf die neuen Typen zu übertragen.

  • 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. Dies ist ähnlich wie assert!(matches!(…)), jedoch wird im Fehlerfall die Debug-Darstellung des Wertes ausgegeben, was die Diagnose erleichtert. In das Prelude wurden keine Makros hinzugefügt, 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 übergibt nicht mehr —allow-undefined an den Linker für WebAssembly-Bauten. Nun werden undefinierte Symbole während des Linkens als Fehler betrachtet, anstatt automatisch in Importe aus dem Modul "env" umgewandelt zu werden. Dies sollte Fehler beim Bauen und falsche Symbolnamen früher aufdecken. Das alte Verhalten kann bei Bedarf über RUSTFLAGS=-Clink-arg=—allow-undefined oder durch explizite Angabe des zu importierenden wasm-Moduls über #[link(wasm_import_module = "env")] wiederhergestellt werden.

  • Cargo hat Sicherheitsupdates erhalten.
    In Rust 1.96.0 wurden zwei Sicherheitsanfälligkeiten behoben, die Benutzer von Drittanbieter-Registries betreffen. CVE-2026-5223 ist mit der Verarbeitung von Symlink innerhalb von tar-Archiven von Crates verbunden: Ein schädliches Paket aus einer Drittanbieter-Registry könnte den Cache eines anderen Pakets aus derselben Registry überschreiben. Ab Rust 1.96.0 lehnt Cargo Crate-Archive mit Symlink ab. CVE-2026-5222 betrifft die Normalisierung von URL Sparse Registry und kann unter bestimmten Bedingungen dazu führen, dass ein Cargo-Token an ein bösartiges Registry gesendet wird. Laut dem Rust-Team sind die Nutzer von crates.io von diesen Problemen nicht betroffen.

  • Änderungen in der Sprache.
    Im Release enthalten sind einige gezielte Fehlerbehebungen und Erweiterungen: die Übergabe von expr-Metavariablen in cfg-Makros ist jetzt erlaubt, die Umwandlung von never-Type in Tupel-Ausdrücken wurde angepasst, seltene Fälle von falschen Typausgabevorschlägen für Funktionsargumente wurden behoben, Unterstützung für Vektorregister s390x in Inline-Assembly wurde hinzugefügt, und es ist nun wieder 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 auf Plattformen.
    Für Linux-Ziele auf LoongArch wurde die Unterstützung für Link-Relaxation aktiviert — eine Link-Optimierung, die einige Sprünge und Adressierungen nach dem Platzieren des Codes vereinfachen kann. 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. Außerdem wurde die verzögerte Verarbeitung von Hostadressen in SGX über ToSocketAddr korrigiert. In der Dokumentation und in internen Verträgen wurde die Definition des Speichers, der 'lesbar/schreibbar' ist, präzisiert: Nullzeiger sind von der allgemeinen Definition ausgeschlossen, und Ausnahmen werden separat für spezifische Methoden angegeben.

  • Stabilisierte APIs.
    Zu den stabilisierten Schnittstellen gehören 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 Repository verweisen: lokal wird die Git-Version verwendet, und bei der Veröffentlichung die Version aus dem Repository, ähnlich dem Verhalten mit crates.io. Außerdem wurde die Unterstützung für target.'cfg(..)'.rustdocflags in der Cargo-Konfiguration hinzugefügt.

  • Rustdoc behandelt die Dokumentation jetzt sorgfältiger.
    Hinweise zu veralteten APIs werden jetzt wie normale Dokumentation gerendert, ohne die frühere spezielle Verarbeitung über white-space: pre-wrap. Außerdem gibt rustdoc keine Warnung mehr bezüglich fehlender Dokumentationsbeispiele für Elemente innerhalb von impl aus, und in der seitlichen Dokumentationsleiste werden Methoden und assoziierte Funktionen separat angezeigt.

  • Mögliche Inkompatibilitäten.
    Die Version enthält einige Änderungen, die sich in nicht typischem Code bemerkbar machen können: die Anordnung einiger #[repr(Int)] Enums wurde in extremen Fällen korrigiert, unnötige unsize-Umwandlungen in Pin wurden untersagt, WebAssembly-Bauten stürzen nun bei undefinierten Symbolen ab, der versehentlich stabilisierte Attribut #![reexport_test_harness_main] ist wieder durch ein feature gate eingeschränkt, der Parameter -Csoft-float wurde entfernt, und die minimale Version von externem LLVM wurde auf 21 angehoben. Für AVR wurde der Typ c_double auf f32 geändert, da C double auf diesen Plattformen standardmäßig 32-Bit ist.

Quelle: linux.org.ru

Zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern kaufen 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Servern | ProHoster