Mozillas Programmiersprache Rust auf dem Weg zur Version 1.0

Es sind zahlreiche Änderungen in Rust 0.7 auszumachen, viele zur Behandlung der Metadaten und der Makros. Stärker wirken sich allerdings die Änderungen an den Bibliotheken aus.

In Pocket speichern vorlesen Druckansicht 12 Kommentare lesen
Lesezeit: 3 Min.
Von
  • Frank Müller

Mozillas Programmiersprache Rust hat nun die Version 0.7 erreicht. Die seit 2006 durch Graydon Hoare vorangetriebene Sprache macht damit im bekannten Rhythmus von etwa drei bis vier Monaten den nächsten Schritt in Richtung Rust 1.0. Ziel von Rust ist, zu einem geeigneten Werkzeug für die Entwicklung großer Systeme zu werden. Dabei geht das Team um Hoare weniger von einem Idealismus denn von einem pragmatischen Ansatz aus. Ausgestattet mit einer Vielzahl zeitgemäßer Sprachelemente zielt diese optisch an C angelehnte Sprache auf die Bewahrung der Systemintegrität, deren Verfügbarkeit und die innere Nebenläufigkeit.

Die Liste der Eigenschaften zeigt, dass sich der Entwickler in Rust aus einem reichhaltigen Werkzeugsatz bedienen kann. Der schnelle Einstieg gelingt imperativ mit einfachen Funktionen, einer reichhaltigen Menge an verfügbaren Basisdatentypen sowie eher gewohnten Konstrukten für Verzweigungen und Schleifen. Überraschender ist hingegen die Tatsache, dass Variablen prinzipiell unveränderlich sind und sich erst durch den Modifier mut verhalten, wie von Sprachen wie C und Java gewohnt.

Und auch der Ersatz für das bekannte "switch" erweckt die Aufmerksamkeit. Hier setzt Rust auf das match-Konstrukt mit einem flexiblen Pattern Matching. Wen das an Erlang erinnert, der wird auch nicht über die vorhandenen Tupel staunen. Doch auch die Objektorientierung inklusive Generics und die funktionale Programmierung kommen in dieser Sprache nicht zu kurz. So bietet Rust Closures aber auch die Kompilierung beeinflussende Metadaten.

Ein erster Baustein ist zum Erreichen ihrer Ziele ist sicherlich die genannte Unveränderbarkeit der Variablen. Das verhindert deren leichtfertiges Überschreiben innerhalb geschachtelter Blöcke. Ebenso wichtig ist der Schutz des Arbeitsspeichers vor Überläufen oder gleichzeitigem Zugriff durch nebenläufigen Code. Hierfür setzt Rust auf einen individuellen Heap mit Garbage Collection für jeden Task. Ein Wert hierauf nennt sich Managed Box.

Für den Austausch von Informationen steht hingegen ein Exchange Heap mit sogenannten Owned Boxes zur Verfügung. Über eine Bibliothek kann der Besitz dieser Boxen von einem Task auf einen anderen übertragen werden. Mit diesen Mechanismen ist Rust nahezu so flexibel wie C, aber trotz Nebenläufigkeit sicherer. Diese wird über die bereits genannten Tasks zur Verfügung gestellt. Hierbei handelt es sich um leichtgewichtige Green Threads, die auf Multicore-System auch parallel ablaufen. So ist der Betrieb Tausender Tasks kein Problem.

Mit der Version 0.7 fließen wieder etwa 2000 Änderungen in die Sprache, vielfach zur Behandlung der Metadaten und der Makros. Stärker wirken sich jedoch die Änderungen an den Bibliotheken aus. Hier wurde core in std und std in extra unbenannt. Das wird sich durch so manches Projekt ziehen und dort zu Batch-Umbenennungen führen. Eine wichtige Veränderung ist das neue flexible Iterator-Modul, das auch Änderungen in weiteren Modulen nach sich gezogen hat.

Hinzu kommen eine Reihe weiterer Umbenennungen, aber auch Löschungen. Dafür sind in extra Module für komplexe und rationale Zahlen sowie großen Integern hinzugekommen. Zu guter Letzt wurden die Tools weiter verbessert. So sind weitere lint-Modi zur Prüfung des Codes hinzugekommen und auch die Generierung der Dokumentation mit rustdoc wurde überarbeitet. (ane)