Programmiersprache: Rust 1.30 will mehr Klarheit schaffen

Der Umgang mit absoluten Pfaden und neue prozedurale Makros sind die Highlights der aktuellen Rust-Version.

In Pocket speichern vorlesen Druckansicht 31 Kommentare lesen
Programmiersprache: Rust 1.30 will mehr Klarheit schaffen
Lesezeit: 3 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Mozilla hat Rust 1.30 veröffentlicht, das vor allem Erweiterungen für prozedurale Makros sowie das Modulsystem mitbringt. Gleichzeitig hat das Team für kommende Woche einen Blogbeitrag zur Beta von Rust 1.31 angekündigt, das den Übergang zu Rust 2018 markieren soll.

Das Modulsystem soll für Entwickler übersichtlicher werden. Eine Neuerung betrifft das Einbinden von Crates, die Bibliotheken (Libraries) oder Paketen (Packages) in anderen Programmiersprachen entsprechen. Funktionen in externen Crates lassen sich nun unabhängig vom jeweiligen Namensraum und ohne führende Doppelpunkte nutzen. Wenn der erste Teil einer Pfadangabe auf eine externe Crate verweist, lässt sich das Element nun unabhängig von der Modulhierarchie verwenden.

Mehr Klarheit über die Pfadzuordnung schafft das neue Schlüsselwort crate, das anzeigt, dass der Pfad mit dem Root-Verzeichnis der Crate beginnt. In der alten Variante war das zwar der Standard in der Kombination mit use, aber das direkte Referenzieren von Objekten nahm jeweils den lokalen Pfad als Basis, sodass

use ::foo::bar

beziehungsweise

use foo:bar

auf einen anderen Ort verwies als der Funktionsaufruf

::foo::bar()

Mit der neuen Regelung ist crate::foo::bar für beide Fälle relativ zum Root-Verzeichnis der Crate. Damit will das Team nicht nur mehr Klarheit schaffen, sondern auch "etwas von der Hässlichkeit des führenden :: loswerden", wie es im Rust-Blog heißt.

Rust 1.30 führt zwei neue Typen prozeduraler Makros ein: attributähnliche und funktionsähnliche. Erste sind Vergleichbar mit den in Rust 1.15 eingeführten sogenannten custom-derive-Makros, gehen aber noch einen Schritt weiter, indem sie jenseits der #[derive]-Attribute, die auf struct- und enum-Elemente begrenzt waren, das Erstellen individueller Attribute ermöglichen. Funktionsähnliche Makros definieren passend zum Namen Makros, die wie Funktionsaufrufe ausschauen.

Schließlich lassen sich Makros neuerdings mit dem Keyword use in den Sichtbarkeitsbereich (Scope) aufnehmen. Zum Verwenden des json-Macro aus der serde_json-Crate war bisher folgende Schreibweise vorgesehen:

#[macro_use]
extern crate serde_json;

während die neue Schreibweise deutlicher ist:

extern crate serde_json;
use serde_json::json;

Zu den weiteren nennenswerten sprachlichen Neuerungen gehört, dass sich Schlüsselwörter nun als Identifier verwenden lassen. So definiert folgender Befehl eine lokale Variable namens for:

let r#for = true;

und folgende Zeile erstellt eine Funktion mit dem Namen for:

fn r#for() {
// ...
}

Weitere Ergänzungen lassen sich dem Rust-Blog entnehmen, der einen weiteren Beitrag für kommenden Montag ankündigt, der sich mit der Beta von Rust 1.31 beschäftigen soll. Bemerkenswert dabei ist vor allem, dass Version 1.31 das Anfang des Jahres angekündigte Rust 2018 einläutet. In der damaligen Ankündigung war bereits davon die Rede, dass der Übergang im Rahmen der Versionen 1.29 bis 1.31 liegen soll.

Rust 2018 soll keine großen Änderungen an der Programmiersprache bringen, sondern vor allem die Produktivität erhöhen. Dazu gehört ein klareres und weniger komplexes Modulsystem, aber auch ein verbessertes Tooling und eine übersichtlichere Dokumentation, die vor allem die Einstiegshürde verringert. (rme)