Suche
Wer rustet, rostet nicht

Rust 1.10: Was ist neu bei Mozillas C-Nachfolger?

Dominik Mohilo

@Shutterstock/thanasus

Die Entwickler der Programmiersprache Rust bleiben ihrem Rhythmus in Sachen Veröffentlichungen auch beim Release von Rust 1.10 treu: Es sind exakt sechs Wochen seit dem Release der Vorgängerversion vergangen. Nun erscheint das Update mit über 1200 Patches sowie drei wichtigen neuen Features – darunter eines, auf das viele Rust-afaris bereits sehnsüchtig gewartet haben.

In Rust we trust

Bereits zehn Jahre ist es her, seit in den heiligen Hallen von Mozilla der Wunsch nach einer Alternative zu C und C++ geboren wurde. Hauptzielgruppe des Projektes waren von Anfang an jene Entwickler, die von C und C++ enttäuscht waren, wie Chefentwickler Graydon Hoare damals in einem Interview mit InfoQ feststellte. Die Motivation für Rust liegt für ihn auf der Hand:

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.

— Graydon Hoare

Voriges Jahr hat die „Multiparadigmensprache“, welche von Graydon Hoare und seinem Team entwickelt wurde, mit Version 1.0 die Kinderschuhe abgelegt. Durch leichtgewichtige Tasks wird die bereits von Sprachen wie Erlang unterstützte Nebenläufigkeit realisiert. Der eigene Compiler, rustc, ist seit 2011 für die Kompilierung von Rust-Programmen verfügbar und wurde selbst in Rust geschrieben.

JAXenter-Autor Frank Müller ordnet die Sprache zwischen C und Googles Sprache Go ein:

Mueller_Frank_1-200x300-87x130Rust ist wie einige andere aktuelle Vertreter eine Multiparadigmensprache mit einer starken Nähe zu C. Hierin finden sich jedoch Funktionen als Datentypen und Closures wieder, Pattern Matching und Makros sind ebenfalls vorhanden. Auch wenn Rust keine Klassen im Sinne der Objektorientierung kennt, so verfügt die Sprache dennoch über die Möglichkeit, Methoden für Typen zu definieren und die Sichtbarkeit zu steuern. Dazu kommen noch Traits und Generics. Für die Nebenläufigkeit setzt Rust jedoch nicht auf die von Erlang und Go bekannten, leichtgewichtigen Green Threads plus Messaging oder Channels für die Kommunikation. Hier kommen native Threads gemeinsam mit Channels und Typen zur Synchronisation in der Standardbibliothek zum Einsatz.

Seit Version 1.0 wird im Turnus von sechs Wochen eine neue Version der Programmiersprache veröffentlicht, aktuell gerade Rust 1.10, das mit wichtigen neuen Features aufwartet.

Lesen Sie auch: Rust: Die guten und die schlechten Seiten

Neuerungen in Rust 1.10

Abbruch statt unwind bei panic

Bei der auf Sicherheit, Geschwindigkeit und Nebenläufigkeit fokussierten Programmiersprache wurde bei Version Rust 1.10 die Möglichkeit eingeführt, für einen panic! einzustellen, dass der Vorgang abgebrochen wird. Normalerweise würde ein Unwind stattfinden, doch über die Flag -C panic=abort oder eine entsprechende Einstellung im Cargo.toml wird dies verhindert.

Zur Erklärung: Ein Thread gerät dann in „Panik“, wenn etwas schiefläuft und damit nicht vernünftig umgegangen werden kann. Wäre eine korrekte Handhabung verfügbar, würde Result genutzt werden. Für viele Anwendungen ist ein Abbruch allerdings die klügere Wahl, da so weniger Code generiert wird und die Binaries kleiner bleiben. Auch die Zeit, die für das Kompilieren aufgewendet wird, fällt beim Abort knapper aus. Die Entwickler geben an, dass sich so etwa zehn Prozent Kompilierungszeit und Binary-Größe einsparen lassen.

Neuer Crate-Typ

Das aktuelle Update von Rust bringt den neuen Crate-Typen cdylib mit sich. Diese Änderung beeinflusst vor allem die Nutzung des dynamischen Bibliotheksformats dylib, das nun ausschließlich für das Schreiben einer dynamischen Bibliothek in einem Rust-Projekt verwendet wird. Beim Kompilieren von Rust-Code in eine dynamische Bibliothek, die in eine andere Sprache eingebettet wird, kommt zukünftig Cdylib zum Einsatz. Diese neuen Crates werden bereits im Compiler von Rust 1.10 unterstützt, noch nicht jedoch in Cargo.

Crates und Module in Rust 1.10

Beispiel: Crate „phrases“ mit Modulen „english“ und „japanese“ und Sub-Modulen / Quelle: Rust-Dokumentation

In Rust gibt es sogenannte Crates. Diese sind mit Bibliotheken oder Paketen in anderen Sprachen gleichzusetzen und enthalten immer ein Wurzelmodul (root module), das den entsprechenden Code für diesen speziellen Crate (engl. für Kasten) beinhaltet. Unter diesem Wurzelmodul können dann Sub-Module in Form eines Baumes erstellt werden. Cargo ist der Name des Paket-Management-Tools von Rust: Mit Cargo werden Crates mit anderen zusammengeführt und kombiniert.

Neues Build-Pattern

Die dritte große Änderung, die Rust 1.10 im Gepäck hat, ist das neue Build Pattern. Für das Builden einer Kopie von Rust ist zunächst einmal eine Kopie von Rust nötig, da Rust in Rust implementiert ist. Dieser allgemein als Bootstrapping bezeichnete Vorgang wurde in Rust bislang durch einen Snapshot des Compilers durchgeführt, von dem aus dann gebootstrappt wurde. Dieser Snapshot wurde periodisch aktualisiert. Dieses System wurde nun überarbeitet, sodass Rust 1.10 mit der stabilen Version Rust 1.9 gebaut wird; zukünftig soll dann Rust 1.11 mit Rust 1.10 buildbar sein und so weiter. Ein großer Vorteil dabei ist, dass nun auch der stabile Compiler anstelle einer spezifischen nightly-Version des Compilers zum Builden des Compilers verwendet wird.

Mehr Details zum neuen Build-Pattern gibt es im entsprechenden Pull Request.

Cargo Features

Mit dem aktuellen Release von Rust wurde auch das Paket-Management-Tool Cargo weiterentwickelt. So kann man nun mit der Option profile.*.panic einstellen, wie panics im jeweiligen Projekt implementiert werden. Außerdem können nun keine Rust-spezifischen Schlüsselworte mehr als Name für Crates verwendet werden. Eine weitere Verbesserung ist die Einführung von cargo --explain, welches der Funktion rustc --explain entspricht.

Neben den oben genannten Features wurde eine Stabilisierung für etwa 70 APIs in Rust 1.10 umgesetzt. Die über 1200 Patches wurden von 139 Helfern und Unterstützern des Rust-Projektes durchgeführt. Eine vollständige Liste und detaillierte Erklärung der neuen Features gibt es im Blog zur Rust-Programmiersprache, die komplette Änderungsübersicht kann auf der GitHub-Seite von Rust gefunden werden.

Rust – der C-Nachfolger?

Die Entwicklung von Rust zum C-Nachfolger schreitet also voran – die Sprache erfreut sich einer treuen Fangemeinde. Schaut man sich indes die einschlägigen Programmiersprachen-Rankings an, so könnte die Mozilla-Sprache in Sachen Verbreitung und Popularität durchaus noch einen Zahn zulegen.

Im TIOBE-Index rangiert die Sprache mittlerweile auf Platz 44 und damit weit hinter C oder C++, dafür aber weit vor Go. Anders sieht es auch im Ranking von Red Monk nicht aus: Dort belegt Rust nur Platz 46, erfreut sich aber eines kontinuierlichen, wenn auch langsamen, Anwachsens seiner Popularität.

In unserer großen JAXenter-Umfrage für das Jahr 2016 hatten 4.4 Prozent der Teilnehmer angegeben, sehr interessiert an der Arbeit mit Rust zu sein, insgesamt haben knappe 14 Prozent unserer Leser Rust als wenigstens „interessant“ eingestuft.

rust

Aufmacherbild: Ancient iron chest von Shutterstock.comUrheberrecht: thanasos

Verwandte Themen:

Geschrieben von
Dominik Mohilo
Dominik Mohilo
Dominik Mohilo studierte Germanistik und Soziologie an der Goethe-Universität in Frankfurt. Seit 2015 ist er Redakteur bei S&S-Media.
Kommentare

Schreibe einen Kommentar

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