Mozillas neue Programmiersprache Rust: Wieso, weshalb, warum?

Hartmut Schlosser
Mozilla Rust

Als Mozilla 2012 mit der Programmiersprache Rust an die Öffentlichkeit trat, fragten sich viele, wozu eigentlich? Will der Browser-Hersteller nun auf anderem Gebiet die Lücken schließen, die die rückläufigen Firefox-Marktanteile aufgerissen haben? Das aktuelle Release 0.12 von Rust bietet eine Gelegenheit, die Sprache ein wenig genauer unter die Lupe zu nehmen.

Was ist Rust?

Rust wurde 2006 von Mozilla-Mitarbeiter Graydon Hoare zunächst als Hobby-Projekt auf den Weg gebracht. Mozilla zeigte Interesse und stattete die Sprache mit einem Entwickler-Team aus, das den Auftrag hat, einen neuen Browser-Stack mittels einer sichereren und besser für nebenläufige Prozesse geeigneten Sprache als C++ aufzubauen (Projekt „Servo“).

Rust ist also als System-Sprache konzipiert, die als Konkurrent für C und C++ – aber auch zu Googles Go – gesehen werden kann. Die Syntax ist denn auch stark an C angelehnt, enthält aber moderne Konstrukte, um invalide Speicherzugriffe zu verhindern und Multicore-Architekturen besser zu unterstützen.

Zu den Charakteristika der Sprache gehören ein nicht-blockierender Garbage Collector, Pattern Matching und algebraische Datentypen (enums), Typeninferenz, Higher-order Functions (Closures), Generics und Polymorphismus in Form von Java-artigen Interfaces in Kombination mit Haskell-artigen Typen-Klassen (traits).

Unterstützt werden sowohl funktionale als auch objektorientierte Programmierweisen. Nebenläufigkeit wird durch leichtgewichtige Tasks realisiert, wie sie beispielsweise in Erlang oder anderen Aktoren-basierten Sprachen anzutreffen sind. Seit 2011 werden Rust-Programme mit dem selbst in Rust geschriebene Compiler rustc kompiliert, welcher wiederum auf LLVM als Backend-Technologie zurückgreift.

So kombiniert Rust eine Vielzahl moderner Features bekannter Programmiersprachen und bringt sie auf das Niveau der System-nahen Prozesse. „Frustrierte C++-Entwickler sind unsere Hauptzielgruppe“, hatte dementsprechend Graydon Hoare in einem InfoQ-Artikel kommentiert und damit auch gleich die Motivation für Rust bezeichnet:

A lot of obvious good ideas, known and loved in other languages, haven’t made it into widely-used systems languages, or are deployed in languages that have very poor (unsafe, concurrency-hostile) memory models.

Auf dem Weg zu Rust 1.0

Derzeit befindet sich die Entwicklung von Rust auf der Zielgeraden zur ersten Major-Version. Rust 1.0 soll laut Roadmap noch in diesem Jahr kommen. Im jetzt veröffentlichten Rust 0.12 wurde schon einmal die Dokumentation auf Vordermann gebracht und um einen neuen, umfangreichen Programmierguide ergänzt.

Feature-seitig kann Rust 0.12 nun mit einem 64-bit Port für Windows aufwarten. Updates der Standard-Library und Verbesserungen des Rust Package Manager Cargo gehören genauso zu den Neuerungen wie überarbeitete APIs der std-Komponente. Kleinere Librarys wie uuid, semver, glob, num, hexfloat, fourcc wurden ausgelagert, können aber via Cargo wieder installiert werden.

Weiter an der Syntax wurde ebenfalls gefeilt. Überladbares Indexing, Where Clauses und eine neue Slicing Syntax gehören hier zu den Neuerungen, die detailliert in den Release Notes besprochen werden.

Rust to Go?

Soweit der Blick auf den Status Quo von Rust. Ob es die Sprache über die Grenzen von Mozilla hinaus zu einer breiteren Anwenderschaft bringt, wird mit Spannung zu beobachten sein. Qualitäten dafür hätte sie schon – allein entscheiden diese nur selten darüber, ob eine Programmiersprache Wirkung in der Industrie zeigt oder aber der ewige Insider bleibt.

Der größte Konkurrenz für Rust ist natürlich erst einmal C/C++. Obwohl die Gruppe der „frustrierten C++-Entwickler“ nicht klein sein dürfte, ist der Programmiersprachen-Veteran oft gesetzt und kann nicht ohne Weiteres durch Rust ersetzt werden.

Will man doch den Schritt weg von C++ wagen, bietet sich Go an. Für die Systemsprache spricht die größere Reife (Go ist derzeit in Version 1.3.3 verfügbar) und das potente Unternehmen Google im Rücken. Laut Marktanalysen scheint sich Google Go bereits eine wachsende Community zu erarbeiten (beispielsweise ist auch die Container-Engine Docker, die derzeit Furore macht, in Go geschrieben).

Und vielleicht gelingt es ja auch Java selbst, eine Systemsprache wie Rust – zum Teil jedenfalls – überflüssig zu machen. Pläne, direkte System-Eingriffe in kommenden Java-Versionen zu ermöglichen, werden bekanntlich gerade geschmiedet.

Rust 1.0 – und dann?

Wie dem auch sei, die Version 1.0 von Rust wird jedenfalls ein erster wichtiger Markstein sein, den die Sprache zu erreichen hat. Wie erwähnt soll zumindest eine Beta noch Ende diesen Jahres erscheinen. Darin sollen noch einige Neuerungen eingebaut werden, Rust-Entwickler Niko Matsakis spricht in einem Blogeintrag von Dynamically Sized Types, Unboxed closures, Associated Types und Multidispatch. Laut Matsakis soll Rust 1.0 das finale Design der Sprache festlegen, und zwar so, dass kommende Releases rückwärtskompatibel bleiben.

Dennoch sieht Matsakis Rust 1.0 nicht als End- sondern als Startpunkt: Jede Menge neuer Features befänden sich bereits am Ideenhorizont. Und das Wichtigste: Matsakis hofft, dass nicht nur das Rust-Entwickler-Team bei Mozilla diese Ideen umsetzen wird, sondern sich eine echte Community, ja ein Ökosystem daran beteiligt. Die wichtigste Voraussetzung dafür ist jedenfalls schon einmal gegeben: Rust wird unter der Apache 2.0 und einer MIT-Lizenz Open Source auf GitHub entwickelt.

Geschrieben von
Hartmut Schlosser
Hartmut Schlosser
Hartmut Schlosser ist Redakteur und Online-Koordinator bei Software & Support Media. Seine Spezialgebiete liegen bei Java-Enterprise-Technologien, JavaFX, Eclipse und DevOps. Vor seiner Tätigkeit bei S & S Media studierte er Musik, Informatik, französische Philologie und Ethnologie.
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.