Programmiersprache: Rust 2021 ist flexibler bei anonymen Funktionen
Seite 2: Erweiterter Auftakt
Darüber hinaus bringt die sogenannte Prelude der Standard-Library die drei zusätzlichen Traits std::convert::TryInto
, std::convert::TryFrom
und std::iter::FromIterator
mit. Dass die Erweiterung im Rahmen der Umstellung auf die neue Edition erfolgt, liegt an der Weise, wie Rust die automatischen Importe in der Prelude verarbeitet.
Der Compiler zieht im Zweifel manuelle Importe vor, und für die meisten Elemente ist eine klare Unterscheidung durch die Referenzierung über die Modulebene möglich. Schwierig wird es jedoch bei den Traits, also Methoden, die in Rust für einen spezifischen Typ definiert sind. Sie können durchaus mit manuell definierten Namen kollidieren. Dadurch können die automatisch importierten Traits potenziell zu Inkompatibilitäten bei vorhandenem Code führen.
Ausdruck der Panik
Eine weitere Anpassung gibt es beim Verwenden von Ausgabemeldungen für unerwartete Programmabbrüche über das Makro panic!
. Bisher nutzt es String-Formatierungen nur dann, wenn der Aufruf mehr als einen Parameter mitgibt. Künftig verarbeitet es ebenso wie println!
den ersten Parameter als Format-String. Die Änderung zielt vor allem auf die Umsetzung für implizite Parameter in solchen Strings, die für println!("Hallo {person}!")
den Wert der Variable person
automatisch einfügt.
Als vorausschauende Maßnahme reserviert Rust 2021 die Syntax für Identifier als Präfixe wie für prefix#identifier
, prefix"string"
, prefix'c'
und prefix#123
, wobei prefix
für nahezu beliebige Identifier steht. Derzeit haben diese Präfixe noch keine Bedeutung, sondern bereiten lediglich künftige Pläne vor.
Minimalvorgaben im Paketmanager
Cargo ist der Paketmanager von Rust, und die Packages heißen Crates. Das aktuelle Release erlaubt in der Manifestdatei Cargo.toml die Angabe einer minimal erforderlichen Rust-Version für ein Crate. Sollte beispielsweise für folgenden Manifestausschnitt
[package]
# ...
rust-version = "1.56"
eine ältere Version als Rust 1.56 vorliegen, bricht Cargo mit einem Fehler ab. Die Neuerung soll Inkompatibilitäten frühzeitig abfangen, bevor sie womöglich kryptische Compilerfehler erzeugen. Neu ist zudem, dass der Feature Resolver für Cargo mit der neuen Edition standardmäßig 2
ist. Der Eintrag edition = "2021"
in der Cargo.toml-Datei impliziert somit resolver = "2"
.
Weitere Neuerungen in Rust 1.56 beziehungsweise Rust 2021 wie erweiterte Makroregeln finden sich im Blogbeitrag zur Veröffentlichung der aktuellen Version. Wie üblich können Entwicklerinnen und Entwickler, die Rust bereits installiert haben, das aktuelle Release über rustup update stable
herunterladen. Für diejenigen, die noch kein Rust verwenden, ist das rustup-Tool auf der Download-Seite separat verfügbar.
(rme)