Ein Interview mit Meade Kincke, in dem er und Katrina Owen über den Rust-Compiler sprechen, über eine GUI, die wissenschaftliche Farbräume nutzt, um die Farbe von Bier zu bestimmen, und über sein Buch „A Practical Guide To Rust“.
Hey Meade. Danke für das Gespräch. Wir wollten mit dir sprechen, weil du der aktivste Mentor bist, den wir im Rust-Track haben. Du hast über 400 Lernenden geholfen. Wie hast du von Exercism erfahren?
Jemand hat in Reddits Rust-Subreddit gepostet, dass der Rust-Track von Exercism Mentoren sucht, also habe ich mir das mal angesehen. Ich bin so froh, dass ich es getan habe, denn es ist ungemein erfüllend, und alle waren so nett und dankbar. Ich habe wunderbare Verbindungen zu meinen Lernenden bei Exercism aufgebaut, und ich liebe es, ihnen zu helfen.
Gibt es besondere Geschichten, die dir im Gedächtnis geblieben sind?
Ja, es gibt eine bestimmte Rust-Übung, die sehr beliebt ist: das Pythagoreische Tripel.
Das häufigste Problem in dieser Übung ist meistens die Performance. Die meisten lösen sie zuerst mit verschachtelten for-Schleifen, was mindestens O(n²) ist und sehr ineffizient. Mein Ziel ist es, meine Lernenden zu einer linearen Lösung zu bringen: O(n).
Mein Ansatz ist, Fragen zu stellen. Ich fange damit an zu fragen, ob sie die Iterator-Methode von Rust lernen wollen, denn sie hat jede Menge Vorteile, unter anderem, dass man die Rayon-Bibliothek nutzen kann, um die Arbeit zu parallelisieren.
Nachdem er mit „Ja, bitte“ geantwortet hatte, erzählte mir einer meiner Lernenden, dass er Rust lernt, weil er es für die eingebettete Steuerung und dann für die Verarbeitung der riesigen Datenmengen nutzen will. Parallelität ist für ihn also wichtig. Er war begeistert, dass ich eine scheinbar einfache Übung genutzt habe, um komplexere und idiomatischere Teile von Rust zu vermitteln.
Jetzt, dank Exercism, hat er mich engagiert, um ihn eins zu eins zu unterrichten, und wir werden zusammen an einigen experimentellen Projekten arbeiten. Außerdem werde ich sein ganzes Team schulen, wenn er das Unternehmen vollständig auf Rust umstellt.
Die Zusammenarbeit mit den Lernenden, die ich betreut habe, hat mir wirklich Freude gemacht, und ich möchte, dass das weiter wächst.
Es gefällt mir so gut, dass ich mich inzwischen freiwillig als Maintainer im Rust-Track gemeldet habe, um mehr im Hintergrund zu helfen.
Diese menschliche Verbindung ist so wichtig! Du bist der Autor von A Practical Guide to Rust. Worum geht es darin, und was hat dich dazu motiviert, es zu schreiben?
Ich habe dieses Buch geschrieben, um anderen zu helfen, bestimmte Aspekte von Rust besser zu verstehen. Es gibt nicht besonders viel Dokumentation zu der Sprache, und ich fand, es brauchte Literatur, die Humor hat und die Konzepte der Sprache greifbar erklärt. Es enthält Anleitungen zu einigen grundlegenden und fortgeschrittenen Bereichen. Ich möchte, dass die Leute ein solides Gefühl für den praktischen Einsatz der Sprache in der realen Welt bekommen. Es zeigt echte Beispiele, keine hypothetischen.
Ich wusste immer, dass ich einmal ein Buch schreiben würde. Als ich mich dabei wiederfand, einem Kollegen aus der Ferne beizubringen, in Rust zu programmieren, ergab sich der Rahmen wie von selbst. Er hatte vorher noch nie Code angefasst, und ich musste Begriffe und Methoden, die wir Nerds als selbstverständlich ansehen, auf neue, verständliche Weise erklären. Wenn wir das Konzept des Ownership in Rust besprochen haben, habe ich Analogien benutzt wie ein Buch aus der Bibliothek auszuleihen statt es zu besitzen.
Außerdem habe ich Beispiele aus meinem Projekt BrewStillery eingebaut. So sieht man gut, wie Dinge wie Structs und Enums in einem echten Programm funktionieren. Es zeigt auch, wie man Parallelität ganz praktisch einsetzt.
Beim Schreiben wusste ich, dass das Buch sich wie eine Geschichte lesen soll und nicht wie ein reines Nachschlagewerk. Es baut aufeinander auf, aber die einzelnen Teile stehen für sich. Das ist der Unterschied, ob man mit einem Chemie-Handbuch kocht oder eine Folge von Julia Childs „The French Chef“ anschaut.
Oh, das klingt spannend. Für wen hast du dein Buch geschrieben, und was nimmt der Leser daraus mit?
Es ist für alle gedacht, die Rust lernen wollen. Das Entscheidende daran, wie ich Ideen ausführe, ist, dass es dem Leser ein grundlegendes Verständnis vermittelt, während sich ein Großteil der anderen Literatur auf reines Auswendiglernen stützt.
Ich sehe, du hast viele positive Rezensionen bekommen. Hast du vor, einen zweiten Band herauszubringen?
Ja! Ich werde natürlich weiterschreiben und plane, weitere Bände zu veröffentlichen.
Neben dem Unterrichten als Mentor und dem Schreiben hast du auch am Rust-Compiler gearbeitet. Kannst du mir davon erzählen?
Natürlich!
Als kurze Einführung in meine Arbeit: Ein Programm kann im Wesentlichen an zwei Stellen laufen, zur Compile-Zeit und zur Laufzeit. Wenn eine Funktion zur Laufzeit ausgeführt wird, muss alles in ihr neu erzeugt und neu berechnet werden. Das bedeutet vor allem, dass Speicher neu belegt werden muss, was wir immer vermeiden wollen. Wenn eine Funktion konstant ist, wird sie in den Speicher geladen, wenn das Programm startet. Je mehr wir zur Compile-Zeit erledigen können, desto besser wird die Leistung unserer Programme.
Vor einer Weile habe ich gehört, dass diese Idee der Compile-Time-Function-Execution (const fn) in Rust umgesetzt wird, und ich war richtig begeistert. Ich begeistere mich sehr dafür, Dinge effizient und genau zu machen. Was mir an const fn besonders gefällt, ist, dass wir, wenn es fertig ist, wunderbare Dinge bekommen wie elegant bestimmte mathematische Konstanten. Derzeit ist pi ein fest codierter Wert. Viele würden sagen, dass das genau genug ist, aber ich finde, es sollte den gesamten verfügbaren Zahlenraum nutzen. Mit const fn können wir die Leibniz-Formel verwenden, die den Gleitkommabereich vollständig ausfüllen würde.
Ich habe noch etwas weiter gelesen und bin auf einen Blogbeitrag gestoßen, der besagte, dass MIRI das Stabilisieren von const fn viel einfacher machen würde. Die Zeit verging, und als neue Versionen veröffentlicht wurden, sah ich keinen Fortschritt. Also habe ich das Rust-Team kontaktiert und angefangen, am Compiler herumzuschrauben.
Das Tolle ist, dass der Compiler selbst in Rust geschrieben ist. Er wurde ursprünglich in OCaml geschrieben und dann in Rust neu geschrieben, was man Bootstrapping nennt. Im Grunde parst der Compiler die gesamte Eingabe in den AST, der dann an die High-Level Intermediate Representation (HIR) übergeben wird, dann an die Medium-Level (MIR) und schließlich an die Low-Level (LIR), die von LLVM verarbeitet wird. Während wir all diese Schritte durchlaufen, kommen wir dem Maschinencode immer näher.
Eines sollte man verstehen: Der Compiler ist auch nur ein Programm, aber ein sehr ausgefeiltes. Rust braucht eine ganze Weile zum Kompilieren und erst recht, um all seine Tests laufen zu lassen. Man kann also nicht einfach etwas Code hineinschmeißen und sagen: „Fertig.“
Meine erste Arbeit am Compiler betraf die HIR. Sie bestand darin, unheimlich viel in der Standardbibliothek (sowohl stable als auch nightly) zu lesen und dabei so manchem Kaninchenbau zu folgen. Ich musste mich rekursiv durch jeden verschachtelten Typ im Compiler nach unten arbeiten, bis ich alle Möglichkeiten ausgeschöpft hatte. Die nightly-/Compiler-Bibliothek hat jede Menge verschachtelter Typen. Wenn man den Faden behalten will, dem man nachgeht, braucht man sehr viel Konzentration.
Erschwerend kommt hinzu, dass an dem Compiler ein verteiltes Team arbeitet, was bedeutet, dass wir oft Merge-Konflikte bekommen.
Es hat so viel Spaß gemacht. Es gibt noch jede Menge zu tun, und das werde ich in naher Zukunft angehen.
Neben diesen Open-Source-Beiträgen weiß ich, dass du CTO eines Blockchain-Unternehmens bist. Ich verbinde Blockchain damit, dass ich viel Geld mit Etherium verloren habe. Was bedeutet Blockchain für dich?
Blockchain ist leider zum gehyptesten Buzzword aller Zeiten geworden.
Es ist viel mehr, als dass die City und die Wall Street auf einen neuen Trend zur digitalen Währung aufspringen. Wir sind eigentlich kein „Blockchain-Unternehmen“: Wir bei Chainetix stellen private Register bereit, mit denen ein Unternehmen seine Daten sicher schützt. Tatsächlich handeln wir nicht einmal mit Kryptowährung. Das Ziel von Chainetix ist, unser Know-how jedem zugänglich zu machen, der ein grundlegendes Verständnis vom Programmieren hat.
Zu meiner Arbeit gehörte, unsere Systeme und unsere Infrastruktur von Grund auf zu planen, um etwas absolut Solides zu schaffen. Ich habe mich für ein Projekt namens Habitat by Chef entschieden. Ich bin darauf gestoßen, weil es in Rust geschrieben ist, was bei einem so großen Unternehmen wie Chef spannend war. Im Gegensatz zu reinem Docker erstellt Habitat Images, die sich selbst automatisch aktualisieren können und erstaunliche Dinge wie Service Bindings machen. Ich habe auch einiges zum core-plans-Repository von Habitat beigetragen.
Du hast vorhin dein Projekt BrewStillery erwähnt. Es klingt, als wäre es dir wichtig. Kannst du uns etwas mehr darüber erzählen?
Ja, das ist es auf jeden Fall!
BrewStillery ist ein Open-Source-All-in-One-Werkzeug für Bier, Wein und Spirituosen, das ich in Rust und GTK3 geschrieben habe. Außerdem habe ich ein CSS-Theme hinzugefügt, das wunderschön einzigartig ist. In einem Satz: Es ist ein fortgeschrittener Rechner für alle, die Spirituosen herstellen.
Ich habe verschiedene Tabs erstellt, um die Rechner zu trennen, die speziell für Bier und Champagner gelten, und dazu einen allgemeinen Tab, der für Brauer, Winzer und Brenner gleichermaßen passt. Wenn man sich die meisten Bier- und Weinflaschen ansieht, sieht man den Alkoholanteil in der Flasche, den Alcohol By Volume. Nun, eine der Aufgaben von BrewStillery ist es, diesen ABV zu bestimmen. Wie man sich wohl denken kann, steckt hier jede Menge nerdige Großartigkeit drin. Worüber ich mich am meisten freue, ist die Berechnung der Bierfarbe:


Diese Vorher-nachher-Bilder zeigen, was passiert, nachdem du Mengen eingegeben hast. Wie ich das umgesetzt habe, hat vorher noch niemand gemacht. Ein weiteres großartiges Feature ist, dass alles direkt beim Tippen berechnet wird. Wenn du die haarigen Details zu Farbräumen wissen willst, sprich mich auf einer Konferenz an, dann können wir bei einem Bier darüber reden!