
Rust lernen heißt neu denken

Jannik
14. Februar 2020
Hinweis: Dieser Artikel wurde unter Zuhilfenahme von KI aus dem Englischen übersetzt. Hier geht's zum Originaltext.
Ich bin mir nicht mehr ganz sicher, warum ich angefangen habe, Rust zu lernen. Vielleicht aus reiner Neugier, vielleicht aber auch wegen eines schleichenden Gefühls der Unterlegenheit nach meinem Bachelorabschluss. Während meines Studiums entdeckte ich meine Leidenschaft fürs Programmieren. Ich hatte jedoch kein Informatikstudium absolviert, daher war der Großteil meines Wissens autodidaktisch erworben. Alles, was ich gelernt hatte, fiel eher in den Bereich der High-Level- als der Low-Level-Programmierung. Ich wusste einige Dinge, ich war gut in dem, was ich tat, und ich liebte es. Aber es gab noch so viel, was ich nicht wusste. Wie genau funktionieren die Sprachen, mit denen ich täglich arbeite, unter der Haube? Wie ist es, "näher am Metall" zu arbeiten? Will ich das für den Rest meines Lebens machen?
Das waren vermutlich einige der Fragen, die ich mir damals stellte. Die letzte Frage ging mir jedoch mit Sicherheit mehr als einmal durch den Kopf. Ich hatte das Gefühl, dass ich mich weiterentwickeln und sehen musste, was es da draußen gibt. Und, meine Güte, ich habe einen großartigen Zeitpunkt dafür gewählt – Anfang 2017. Das waren die Tage, an denen ich Rust entdecken würde.
Zu dieser Zeit recherchierte ich verschiedene Sprachen wie Go, Haskell und Python. Rückblickend habe ich mich wahrscheinlich für Rust entschieden, weil man damit so vielfältige Dinge machen kann. Ein weiterer Pluspunkt war, dass die Syntax nicht so ungewohnt aussah. Rust schien perfekt für mich geeignet zu sein. Neue Dinge zu lernen und in verschiedene Bereiche vorzudringen, schien mit Rust leicht erreichbar.
Ich wollte die Sprache nicht einfach dadurch lernen, dass ich meine tägliche Arbeit mit Rust fortsetzte. Ich wollte die Gelegenheit nutzen, etwas Neues zu lernen – Dinge, mit denen ich während meines Studiums nie in Berührung gekommen war. Im folgenden Abschnitt habe ich eine Liste von Dingen zusammengestellt, die ich mir vorgenommen hatte, um nicht nur Rust zu lernen, sondern auch neue Anwendungsmöglichkeiten für Programmierung zu entdecken.
Zelluläre Automaten

Ein "Räuber (rot) und Beute (grün)" zellulärer Automat in Aktion. Ein nie endender Kreislauf von Leben und Tod.
Während einer YouTube-Binge-Session stieß ich auf diesen Kanal, insbesondere auf dieses Video, in dem der Ersteller, Hopson, einen zellulären Automaten – ein Gitter von Zellen, die sich nach einem Regelwerk verhalten, das auf den Zuständen ihrer Nachbarn basiert – mit C++ und SFML programmiert. Das sah ziemlich cool aus und ich war, gelinde gesagt, fasziniert. Zu dieser Zeit hatte ich ein Buch über Rust durchgelesen und suchte nach einer praktischen Anwendung für die Sprache. Einen zellulären Automaten zu schreiben, ist eine großartige Möglichkeit, eine Sprache zu erlernen; man braucht nicht viel, um anzufangen. Finde einfach einen Automaten und sein Regelwerk und leg los. Für den Automaten, den ich schrieb, verwendete ich keine Grafik; ich gab das Gitter einfach im Terminal aus. Der resultierende Code ist hier zu finden. Es ist nicht viel, aber es half mir, mich mit einigen Sprachfunktionen von Rust sowie dem berüchtigten Borrow Checker – der Art und Weise, wie die Sprache sicherstellt, dass ein Programm speichersicher ist – vertraut zu machen.
Einen Interpreter/Compiler schreiben

Die "Monkey"-Sprache in Aktion
Irgendwann letztes Jahr, nachdem ich aufgrund meiner Masterarbeit für einige Monate keinen Rust-Code mehr angefasst hatte, stieß ich auf Thorsten Ball und seine beiden Bücher: „Writing an Interpreter in Go" und „Writing a compiler in Go". Ich hatte sie schon ein paar Mal im Rust-Subreddit und an anderen Stellen gesehen; die Leute schienen diese Bücher überall zu empfehlen. Während ich mich durch das erste Buch arbeitete, entdeckte ich etwas sehr Wichtiges: Auch wenn die in diesen Büchern verwendete Sprache Go ist, hindert mich das nicht daran, den Interpreter in Rust zu schreiben. Ganz im Gegenteil, es bereichert die Lernerfahrung sogar. Konzepte von einer Sprache in eine andere zu übertragen, hilft wirklich, das Verständnis dieser Konzepte in der Sprache, die man zu lernen versucht, zu vertiefen. Zusätzlich verstand ich endlich, wie interpretierte Sprachen unter der Haube funktionieren. Ich lernte über Lexing, Parsing, Evaluieren, den Aufbau eines REPL, Operatorpräzedenz und die Implementierung von Sprachfeatures. Dinge, von denen ich viel gehört, aber nie wirklich ein tiefes Verständnis hatte. Ich muss das Interpreter-Buch noch zu Ende bringen und habe erst wenige Seiten des Compiler-Buchs gelesen – es gibt noch so viele Codezeilen zu schreiben und so viel zu lernen. Mein miserabler Code ist hier zu finden. Nehmt ihn nicht als Referenz, ich habe viel Besseres da draußen gesehen.
Raytracing an einem Wochenende
Ähnlich wie im vorherigen Abschnitt ist die Ray Tracing in One Weekend-Reihe eine großartige Ressource, die man beim Erlernen einer neuen Sprache nutzen kann. Darüber hinaus ist Raytracing – eine Methode, um realistische 3D-Computergrafiken durch Simulation von Lichtstrahlen zu rendern – ein verdammt interessantes Thema, und man sieht recht schnell Ergebnisse. Der Autor Peter Shirley verwendet C++, also musst du wieder Programmierkonzepte an Rust anpassen und erlebst eine tolle Lernerfahrung. Ich bin erst kurz vor dem Ende des ersten Buches und muss noch einige Fehler beseitigen. Ich freue mich definitiv darauf, in den Rest der Serie einzutauchen. Einen Raytracer zu schreiben, ist eine wirklich unterhaltsame und lohnende Anfangsaufgabe beim Erlernen einer neuen Programmiersprache.
Hier ist der aktuelle Stand meines Raytracers. Es gibt derzeit einen Fehler bei den Brechungen, der ziemlich schwer zu finden ist. Die linke Kugel soll aus Glas bestehen, aber die Brechungen sehen seltsam aus. Es gibt noch viel zu tun und zu lernen.

Es ist nicht viel, aber es ist alles, was der Raytracer derzeit produziert.
rayn von GitHub-Benutzer @termhn ist ein beeindruckendes Beispiel für einen Raytracer, der auf die gleiche Weise begann, aber erheblich erweitert und modifiziert wurde. Auf GitHub findest du viele weitere Beispiele.
Wenn du andere Ressourcen gefunden hast, die in eine ähnliche Kategorie fallen wie die oben beschriebenen, lass es mich wissen! Ich bin immer auf der Suche nach neuen und interessanten Dingen, die ich in Rust bauen kann. Derzeit plane ich, das Interpreter-Buch und die Raytracing-Bücher abzuschließen. Vielleicht finde ich irgendwann die Zeit und den Mut, mit dem Compiler-Buch zu beginnen. Ansonsten möchte ich Rust wirklich nutzen, um ein einfaches Spiel zu schreiben. Vielleicht ein ASCII-Rogue-like? Es gibt so viele spaßige Dinge zu tun und so wenig Zeit. Aber ich weiß, dass die Chance, an diesen unterhaltsamen Projekten zu arbeiten und dabei weiterhin neue Dinge zu lernen, mich immer wieder zu Rust zurückbringen wird.
Hier sind einige Links, die dir den Einstieg in deine Reise zum Erlernen von Rust erleichtern:
Coding
Rust
Programming
Rustlang
Learning
Weitere Themen

Lea, 04.04.2025
Vue clever nutzen – Wiederverwendbarkeit für Einsteiger:innen
Vue
JavaScript
Reusability
DRY Principle
Components
Composables

Francesca, Ricarda, 02.04.2025
Die 10 häufigsten Fehler bei der Entwicklung digitaler Produkte – und wie du sie vermeidest
MVP development
UX/UI design
product vision
agile process
user engagement
product development

Judith, 31.03.2025