Programmiersprache: Rust 1.24 kompiliert inkrementell

Mit dem aktuellen Release ist die inkrementelle Kompilierung, die das Team bereits 2016 vorgestellt hat, standardmäßig aktiviert. Außerdem gibt es ein Tool zum sauberen Formatieren des Codes.

In Pocket speichern vorlesen Druckansicht 10 Kommentare lesen
Programmiersprache: Rust 1.24 kompiliert inkrementell
Lesezeit: 2 Min.
Von
  • Rainald Menge-Sonnentag

Mozilla hat Version 1.24 von Rust veröffentlicht. Die wohl interessanteste Neuerung für die auf Nebenläufigkeit und Sicherheit ausgerichtete Programmiersprache ist, dass das inkrementelle Kompilieren nun standardmäßig aktiviert ist. Sprachliche Neuheiten gibt es diesmal keine, aber das Team hat ein möglicherweise auftretendes unvorhersehbares Verhalten im Code im Zusammenspiel mit panic! beseitigt.

Die inkrementelle Kompilierung hat das Team erstmals im September 2016 vorgestellt, und diverse Toolchains für andere Programmiersprachen nutzen sie ebenfalls. Für Rust erstellt das System einen Graph von Abhängigkeiten. Bei Codeänderungen muss es somit nur die betroffenen Teile neu kompilieren und entsprechend linken und kann so den Zeitaufwand für das erneute Erstellen des Binaries möglichst gering halten.

Bei Änderungen erstellt die Toolchain nur die betroffenen Teile neu und verbindet sie mit dem Rest.

(Bild: Rust-lang.org)

Das automatische Dependency-Tracking von Rust ist in die Compiler-APIs integriert, und das System stellt sicher, dass es beim Build-Prozess niemals alten Code verwendet. Der tatsächliche Effekt bezüglich der Zeitersparnis hängt vor allem davon ab, wie die einzelnen Teile des Codes miteinander verknüpft sind, also welche Abhängigkeiten von einzelnen Änderungen betroffen sind. Um die Build-Zeit zu optimieren, sollten Entwickler die Pakete mit cargo check überprüfen.

Eine weitere Neuerung in Rust 1.24 ist rustfmt, das derzeit noch Preview-Status hat. Es formatiert Rust-Code auf der Basis von Stilrichtlinien und lässt sich sowohl mit rustfmt Dateiname auf einzelne Dateien als auch auf komplette Pakete über cargo fmt anwenden. Anweisung zum Verwenden aus Visual Studio Code, Atom, Sublime Text, Emacs und Vim finden sich im GitHub-Repository von rustfmt. Entwickler können Teile des Codes explizit vom Formatieren über folgende Kennzeichnungen ausschließen:

#[rustfmt_skip] // requires nightly and 
// #![feature(custom_attribute)] in crate root
#[cfg_attr(rustfmt, rustfmt_skip)] // works in stable

Daneben bringt das aktuelle Release von Rust einige Stabilisierungen der Bibliotheken. Unter anderem soll str::find bis zu zehn Mal schneller arbeiten als bisher. Diverse Funktionen lassen sich nun innerhalb konstanter Ausdrücke, beispielsweise zum Initialisieren von als static deklarierten Variablen verwenden, darunter ptr::null, null_mut sowie size_of und align_of von mem.

Weitere Details lassen sich dem Rust-Blog entnehmen. Die vollständige Liste der Neuerungen findet sich in den Release Notes. Der Sourcecode liegt quelloffen im GitHub-Repository, und Information zum Installieren von Binaries auf Linux, macOS und Windows stehen in der Rust-Dokumentation. (rme)