Mit einer Reihe von Neuerungen und bereinigten Fehlern ist jetzt die neue Rust-Version 1.96.0 erschienen.
Zu den Neuerungen gehören neue Range*-Typen. Der Hintergrund dafür ist, dass viele Nutzer davon ausgehen, dass Range und verwandte core::ops-Typen die Schnittstelle ‘Copy’ implementieren. Doch dies ist nicht der Fall: Sie implementieren direkt die Schnittstelle ‘Iterator’. Nun ist es aber nicht ratsam, sowohl ‘Iterator’ als auch ‘Copy’ für denselben Typ zu implementieren. RFC3550 schlug deshalb eine Reihe von Ersatz-Range-Typen vor, die statt ‘Iterator’ die Schnittstelle ‘IntoIterator’ implementieren, was bedeutet, dass sie auch die Schnittstelle ‘Copy’ implementieren können. Der Standardbibliotheksteil dieses RFC ist nun stabil und führt neue Typen ein wie core::range::Range, core::range::RangeFrom oder core::range::RangeInclusive.
Die neuen Makros ‘assert_matches!’ und ‘debug_assert_matches!’ prüfen, ob ein Wert mit einem vorgegebenen Muster übereinstimmt, und lösen andernfalls eine Panik mit einer Debug-Darstellung des Werts aus. Sie entsprechen im Wesentlichen ‘assert!(matches!(..))’ und ‘debug_assert!(matches!(..))’, doch der ausgegebene Wert erleichtert die Fehlerdiagnose.
WebAssembly-Targets übergeben nun nicht mehr ‘–allow-undefined’ an den Linker, was bedeutet, dass undefinierte Symbole beim Linken nun einen Linker-Fehler auslösen, anstatt in WebAssembly-Importe aus dem Modul env umgewandelt zu werden. Diese Änderung verhindert das Linken von Modulen, solange nicht alle verknüpfungsrelevanten Symbole definiert sind, um Fehler früher zu erkennen.





