Open Source im professionellen Einsatz
Linux-Magazin 08/2015
548

Makros

Makros generieren Code zur Übersetzungszeit, was den Programmieraufwand bisweilen erheblich reduziert. Solche wie »println« verwendet der Entwickler ähnlich wie Funktionen. Jedoch folgt dem Namen des Makros ein Ausrufezeichen wie in Zeile 8 von Listing 6. Noch deutlicher unterscheiden sich Makros in ihrer Syntax von den Funktionen.

Listing 6

Makros (macro.js)

01 macro_rules! length {
02   ($expression:expr) => (
03     println!("Die Länge des Ausdrucks beträgt: {}", (stringify!($expression)).len())
04   )
05 }
06
07 fn main() {
08   length!(7 + 4);
09 }

Die ersten fünf Zeilen von Listing 6 zeigen den Code des aufgerufenen Makros »length« . Nach dem Schlüsselwort »macro_rules!« folgt der Name des Makros. Rust gleicht »($expression:expr)« bei jedem Aufruf mit dem übergebenen Parameter ab. Das Muster ist jedoch so allgemein, dass es auf jeden Wert passt. Zugleich speichert es den übergebenen Wert in der Metavariablen »$expression« . Die Angabe »:expr« qualifiziert den Wert in der Variablen als Rust-Ausdruck.

Verzeichnet Rust beim Abgleich einen Treffer, wertet ihn der Block ab Zeile 2 aus. In Zeile 3 wandelt das Makro »stringify« den Wert aus der Metavariablen in eine Zeichenkette um, deren Länge wie zuvor »println« ausgibt. Wer die Datei »macro.js« mit dem Befehl »rustc macro.js && ./macro« kompiliert und ausführt, sieht als Resultat die Meldung »Die Länge des Ausdrucks beträgt: 5« .

Cargo

Analog zu Gems [6] unter Ruby oder Pip [7] unter Python besitzt auch Rust mit Cargo [8] ein eigenes Paketverwaltungsprogramm, es erzeugt und verwaltet Rust-Pakete von der Kommandozeile aus. Derzeit bietet die Rust-Community etwa 2200 fertige Pakete unter [9] an (Abbildung 1). Der Befehl

Abbildung 1: Die Community von Rust arbeitet fleißig an Zusatzsoftware für die Programmiersprache.
curl -sSf https://static.rust-lang.org/rustup.sh | sh

installiert nicht nur die letzte stabile Binärversion des Rust-Compilers unter Linux, sondern Cargo gleich mit. Der Befehl »cargo new test« baut das Verzeichnissystem aus Listing 7 als Gerüst für das Rust-Paket »test« unter dem gleichnamigen Ordner.

Listing 7

Typische Verzeichnisstruktur eines Rust-Pakets

01 test
02   |- Cargo.toml
03   |- src
04      |- lib.rs

Die Datei »Cargo.toml« (Listing 8) sichert die Metadaten zum Paket. Github beschreibt in der Spezifikation das Format der verwendeten Sprache Toml [10]. Die Konfigurationsdatei enthält neben dem Namen, der Version und dem Autor gegebenenfalls auch Abhängigkeiten des Pakets im INI-Stil.

Listing 8

Cargo.toml

01 [package]
02 name = "test"
03 version = "0.1.0"
04 authors = ["pa"]

Die Datei »lib.rs« (Listing 9) speichert den Rust-Code des Pakets, den der Entwickler zu einem späteren Zeitpunkt und mit Hilfe der Anweisung »use test;« in Rust-Programme einbindet. Anschließend wechselt er mit »cd test« in das Paketverzeichnis und kompiliert das Projekt über »cargo build« mit dem Rust-Compiler »rustc« .

Listing 9

lib.rs

01 #[test]
02 fn gt_zero() {
03   assert!(1>0);
04 }

Mittels »cargo test« filtert er Testfunktionen wie beispielsweise die Funktion »gt_zero()« (Listing 9) aus dem Paket heraus und führt sie anschließend aus. Die Rust-Option »#[test]« in Zeile 1 weist »gt_zero()« als Testfunktion aus. Sie generiert – unterstützt vom Makro »assert« – das Testergebnis für den Test »1 > 0« in Abbildung 2.

Abbildung 2: Cargo führt Testfunktionen aus dem Programmtext automatisch aus.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Rust

    Von der Öffentlichkeit weitgehend unbeachtet arbeitet die Mozilla Foundation an einer eigenen Programmiersprache. Rust soll das Schreiben von zuverlässigen und schnellen nebenläufigen Anwendungen erleichtern. Zu diesem Zweck machen die Entwickler großzügig Anleihen bei anderen Sprachen.

  • Rust 0.12 erschienen

    Die von Mozilla geförderte Programmiersprache Rust erinnert an C und C++ und soll sichere Client- und Serveranwendungen für das Internet ermöglichen. Nun ist Version 0.12 erschienen.

  • Roadmap für Rust 1.0

    Rust-Entwickler Niko Matsakis wagt einen Ausblick auf die Version 1.0 und zählt auf, was bis dahin noch zu tun ist. Unter anderem will man einen Paketmanager und einen festen Release-Zyklus einführen.

  • Rust 1.15 ist fertig

    Die Programmiersprache Rust ist in der stabilen Version 1.15 erschienen. Unter anderem haben die Entwickler das Build-System in Rust unter Einsatz von Cargo geschrieben.

  • Rust 1.0 ist fertig

    Die von Mozilla geförderte Programmiersprache Rust hat die Hürde zur Version 1.0 übersprungen und soll damit für den stabilen Einsatz bereit sein.

comments powered by Disqus

Ausgabe 08/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.