Während die vorherigen Updates eher kleiner ausfielen, bringe Rust 1.26.0 womöglich die meisten neuen Features seit Version 1.0 mit, schreibt das Rust-Core-Team in der Release-Mitteilung.
An erster Stelle der Ankündigung erwähnt das Team die Dokumentation: “The Rust Programming Language” ist nun in zweiter Ausgabe erschienen und sei “eine Verbesserung in alle Richtungen”. Für die gedruckte Ausgabe, die bei Nostarch Press erscheinen soll, erhalte die Dokumentation noch letzte Korrekturen, lässt sich aber bereits unter doc.rust-lang.org nachlesen oder über den Befehl “rustup doc –book” lokal generieren.
Zu den neuen Features gehört unter anderem das “impl Trait”, das einen “existenziellen Typ” implementiert. Auf eine Funktion angewendet, bedeutet es für diese, dass sie keine Argumente akzeptiert, aber einen Typ zurück gibt, der das Trait Trait implementiert. Dabei bringe “fn foo() -> impl Trait {…}” Vorteile gegenüber “fn foo() -> Box<Trait> {…}” mit und sei das neue Feature besonders für Funktionen interessant, die Closures oder Iteratoren zurückgeben. Ausführliche Hintergründe dazu liefert der Blogpost.
Daneben machen es die Entwickler einfacher, “match” für Referenzen auf Optionen anzuwenden. Der dazu nötige Code sieht aktuell nicht nur etwas ungewöhnlich aus, sondern die dafür nötigen Änderungen bringen Entwickler auch nicht weiter. Dank Match Bindings referenziert und dereferenziert der Compiler Match-Statements automatisch und lässt Entwickler weniger Boilerplate-Code schreiben.
“main()” gibt ein Ergebnis zurück
Die “main()”-Funktion kann neuerdings über den “?”-Operator einen Fehlercode mitsamt Debug-Informationen zurück liefern. Das ging bislang nicht, weil der Operatur einen Typ “Result” benötigte, dieser in “main()” aber nicht funktionierte. Vor allem neue Entwickler griffen daher auf etwas umständliche Workarounds zurück. Eine Funktion darf nun laut Blogpost so aussehen:
use std::fs::File;
fn main() -> Result<(), std::io::Error> {
let f = File::open("bar.txt")?;
Ok(())
}
Und sonst so
Lange vor Rust 1.0 war es möglich, exklusive Bereiche zu definieren. Ein “for i in 1..3 {…}” gab dann für “i” die Ergebnisse 1 und 2 aus, nicht aber 3. Seit Rust 1.26.0 ist auch ein
“for i in 1..=3 {…}” erlaubt, das die 3 in den Bereich einschließt und als Ergebnis für “i” mitliefert.
Auch auf Slice Patterns haben die Nutzer von Rust laut Blogpost länger gewartet. Damit funktionieren Matches für Teile von Arrays, selbst wenn deren Länge nicht ganz klar ist. Auch hierfür liefert das Blog Beispiele. Neu ist auch, dass Rust 1.26.0 128-Bit-Integer erlaubt, in Form von “i128” und “u128”.
Ganz allgemein haben die Entwickler die Performance des Compilers gesteigert, der braucht zum Übersetzen des Codes durchschnittlich 12 Prozent weniger Zeit. Die Bibliothek “fs::read_to_string” ist stabilisiert und liest nun problemlos eine komplette Datei in den Arbeitsspeicher.
Für den Paketmanager Cargo gab es weniger neue Features, die Rust-Entwickler haben ihn allerdings weiter stabilisiert und schneller gemacht. Herunterladen lässt sich Rust 1.26.0 über die Webseite, ein “rustup update stable” aktualisiert auf die neueste Version.






