Programmiersprache: Rust 2021 ist flexibler bei anonymen Funktionen

Seite 2: Erweiterter Auftakt

Inhaltsverzeichnis

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.

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.

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)