Mein Einstieg in Rust

Rostige Zahnräder (Anlehnung an Rust)

Rust ist eine vor knapp 10 Jahren bei Mozilla Research ins Leben gerufene Sprache, die bekannte Probleme von z.B. C hinsichtlich der Speicherverwaltung angeht. In den nächsten Wochen beschäftige ich mich genauer mit dem Newcomer.

Es ist, wie auch in "The Passionate Programmer" empfohlen, sinnvoll, sich von Zeit zu Zeit eine komplett neue Programmiersprache anzueignen. Ich habe in den letzten Jahren viel mit Python sowie in letzter Zeit mit C(++) gearbeitet und suchte daher in den letzten Wochen eine Programmiersprache, die viele Konzepte beider Sprachen vereint. Darunter sollten folgende Eigenschaften sein:

  • statische Typisierung (wie in C)
  • modern und entwicklerfreundlich, mit z.B. einer guten Paketverwaltung (wie in Python)
  • intermediate-level-Ausrichtung (wie in C)

Die Wahl fiel auf Rust. Ich habe aus dem Augenwinkel bereits in den letzten Jahren die Entwicklung der von Mozilla vorangetriebenen Sprache verfolgt und möchte in der nächsten Zeit dort ein wenig mehr durchsteigen.

Rust hat viele Konzepte, welche die Sprache so interessant wie auch anspruchsvoll gestalten. Die Sprache legt einen besonderen Wert auf sichere Programmierung, insbesondere hinsichtlich des Speichermanagements, und möchte beispielsweise Null- wie auch Dangling-Pointer konzeptionell vermeiden. Der Sprachstil orientiert sich hieran und sorgt beim Entwickeln dafür, dass man sich öfter auf Low-Level-Ebene Gedanken um das Programmverhalten und die Auswirkungen auf der Maschine macht.

Es paar charakterisierende Beispiele Rusts: Variablen können nicht Null annehmen, dafür gibt es jedoch den Option-Typ. Es gibt keine Exceptions, wohl jedoch einen Result-Typ. Die (zwingende) Behandlung dieses Typs führt dazu, dass man sich am Entstehungsort mit den verschiedenen Szenarien einer Rückgabe beschäftigt und diese bereits verarbeitet. Alle Variablen sind per default immutable (unveränderbar) und private. Ein besonderes Konzept zur Lifetime und Ownership von Variablen macht einen Garbage Collector überflüssig. Klassen exisiteren nicht, wohl aber structs, impls und traits. Hier ist das Motto: Daten und ihre Verarbeitung voneinander entkoppeln sowie die Komposition der Vererbung vorziehen.

Darüberhinaus ist der Compiler rustc entsprechend streng. Der Code weist, wenn man idiomatisch (also vereinfacht gesagt: nah an den best-practises) entwickelt, eine hohe Qualität auf. Hier haben wir eines der Merkmale von Rust: ein Großteil von typischen Fehlern kann bereits zur Compile-Time erkannt werden. Entsprechend oft fällt Code auch durch den Compiler - der allerdings sinnvolle Hilfestellungen liefert: ein Compiler, der sagt "hey, das kann ich so nicht stehen lassen, aber wenn du rustc --explain ... eingibst, zeige ich dir Beispiele, wie das passiert und wie das vermieden werden kann" habe ich bisher noch nicht in der Form gesehen. Soetwas finde ich aber für Ein- und Umsteiger sehr sinnvoll.

Ebenso sinnvoll sind die drei Nachschlagewerke Rusts: das Rust Book, Rust by Example (besonders gut für Umsteiger, da hier gezeigt wird, wie bestehende Muster in Rust umgesetzt werden) sowie die API Referenz.

Ehrlich gesagt lässt sich viel über Rust schreiben. Ich werde euch an meinem Einstieg in die Sprache die nächsten Wochen auch ein wenig teilhaben lassen. Was denkt ihr über Rust? Wünscht ihr weitere Artikel zu der Programmiersprache?

6 Kommentare

  • Dee

    Zitat: „Wünscht ihr weitere Artikel zu der Programmiersprache?“ Also von meiner Seite her sehr gern. Ich erwarte kein Tutorial, aber so ein, zwei Besonderheiten der Sprache, vor allem anhand der Beispiele, wo sich Rust abgrenzt zu anderen, wären interessant.

    Reply
  • tux.

    Rust ist von Mozilla als "sicheres C++" konzipiert, Go von Google als "sicheres C". Nicht in einen Topf werfen! ;-) Ansonsten: Wer Angst vor Pointern hat, der sollte lieber nicht Programmierer werden. Habe wenig Verständnis für die hier "gelösten" "Probleme".

    Reply
    • Simon Biewald

      "Wer Angst vor Pointern hat..." Es ist schön, dass du mit Pointern gut und - scheinbar auch sicherheitskritischen Umgebungen - sicher umgehen kannst. Nur das können nicht alle Programmierer - man merkt es an den vielen Sicherheitslücken die Programme in C/C++ häufig haben. Eng gesteckte Deadlines machen Software leider nicht besser. Die Smart-Pointer in C++ machen zwar vieles besser - aber eben noch nicht alles. Ganz nebenbei: Man kann bei Rust nicht "aus Versehen" unsicheren Code schreiben, wie beispielsweise "out of Bounds" zugreifen. Dadurch, dass bestimmte Best-Practices bereits beim Kompilieren erzwungen werden, werden "dumme" Fehler vermieden - die nun mal alltäglich vorkommen. Natürlich kann man ohne Rust gut programmieren - das schaffen nur nicht alle. Und wäre perfekt zu Programmieren die Voraussetzung zur Programmierung, gäbe es nur eine kleine Hand voll an Programmierern. Kurz: In einer perfekten Welt würde ich dir Recht geben, aber Rust ist eine Programmiersprache für die reelle Welt :)

      Reply
  • Simon

    Hey Viktor, Rust ist seit dem ich die Sprache kenne meine, Lieblingssprache. Ich habe für dich als Tipp drei Blog-Beiträge die beim Behandeln von String und &str sehr hilfreich sind: https://hermanradtke.com/2015/05/03/string-vs-str-in-rust-functions.html https://hermanradtke.com/2015/05/06/creating-a-rust-function-that-accepts-string-or-str.html https://hermanradtke.com/2015/05/29/creating-a-rust-function-that-returns-string-or-str.html Viele Spaß mit Rust Simon

    Reply
  • SoundsoBananajoe

    Ja, mehr Artikel zur Rust Programmierung wäre sicherlich sehr gut! Ps. Vor allem was einfache 2D Spiele Entwicklung für Linux in Rust angeht, wäre für mich und uns sehr Interessant. Aber nur wenn es dir keinen Aufwand macht! Aber auch sonst, gern weiter so.... :-)

    Reply
  • merto

    Ich beginne mich gerade für linux zu interessieren. Ich habe schon zu Windows zeiten auf heise von Rust gehört. Nun wäre es mal eine idee das Programmieren zu versuchen. Kannst du eine step by step anleitung. Vom einrichten zum ersten kleinen Grafischen Programm empfehlen? Bsp. Ein kleiner Taschenrechner, oder ähnliches.

    Reply
Kommentar verfassen