Rust 1.30.0: Verbessertes Modulsystem, erweiterte Makros

Die Rust-Entwickler haben eine neue Version 1.30.0 ihrer Programmiersprache angekündigt. Die ergänzt neue Arten prozeduraler Makros, legt deren Gültigkeit mit “use” fest und verbessert das Modulsystem.

Attribut- und funktionsartige prozedurale Makros sind die Neuzugänge für Rust 1.30.0. Erstere ähneln angepassten Derive-Makros, erlauben es aber, anstelle des “#[derive]”-Attributs selbst gewählte zusätzliche und neue Attribute zu definieren. Zudem funktionieren sie nicht nur für Structs und Enums, sondern auch für Funktionen.

Über “rustup update stable” lässt sich die neue Rust-Version einspielen.

Funktionsartige prozedurale Makros definieren Makros, die wie Funktionsaufrufe aussehen. Dies kann für den Fall von SQL etwa so aussehen:

let sql = sql!(SELECT * FROM posts WHERE id=1);

Das Makro, zu erkennen am Ausrufezeichen, würde laut der Ankündigung der neuen Version das eingebettete SQL-Statement parsen und auf seine syntaktische Korrektheit hin überprüfen. Definieren lässt es sich über:

#[proc_macro]
pub fn sql(input: TokenStream) -> TokenStream {...}

Hierbei folgt das funktionsartige Makro dem Derive-Makro, indem es den Code innerhalb der Klammern auswertet und den zu generierenden Code zurück gibt. Zugleich fällt die bisherige “#[macro_use]”-Schreibweise weg, um Makros von externen Crates zu verwenden. Sie ersetzt der Einsatz von “use”.

Modulsystem verbessert

Nicht zuletzt haben die Entwickler das Modulsystem verbessert beziehungsweise einige umständliche und ungewöhnliche Syntaxregeln verändert. So kam es bislang zu Problemen, wenn Entwickler eine Funktion in ein Submodul verschoben, ohne noch einmal explizit ein “use” voranzustellen. Neuerdings prüft Rust den Pfad, um automatisch zu erkennen, ob es sich um ein externes Crate handelt. Ist das der Fall, wird es ungeachtet der aktuellen Position in der Modulhierarchie verwendet.

Dazu passend bringt Rust auch den Einsatz des “crate”-Schlüsselworts ein. So signalisiert “use crate::foo::bar;”, dass der Pfad zur Funktion “bar” aus dem Modul “foo” im Crate-Wurzelverzeichnis beginnt und nicht im aktuellen Verzeichnis. Das erlaubt es etwa, die Funktion von Modul Nummer 1 aus der Funktion von Modul Nummer 2 heraus aufzurufen, ohne “use” verwenden zu müssen.

Weitere Änderungen und Neuerungen erläutern die offizielle Ankündigung zur aktuellen Version sowie die eher knapp gehaltenen ausführlichen Release Notes auf Github. Wer Rust installiert hat und auf die neue Version aktualisieren will, gibt “rustup update stable” ein (Abbildung 1).

E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben