Bei Rust mitwirken — Sprache, Compiler und Standardbibliothek

Der Quelltext von Compiler und Standardbibliothek liegen im Hauptrepository, und nachdem seine Verwaltung die Hauptaufgabe dieses Repositories ist, beziehen sich auch viele Labels im Issue-Tracker darauf. Ein paar der ergiebigeren Labels sind A-codegen für die Übersetzung von Rust in die LLVM-IR; A-debuginfo für die Erzeugung von Metadaten für Debugger, A-diagnostics für Fehlermeldungen und anderes Feedback des Compilers; A-libs für Tickets zur Standardbibliothek, A-macros und A-syntaxext für Syntaxerweiterungen und A-typesystem für das Typsystem der Sprache.

Es existiert keine regelmäßig gepflegte Dokumentation zur Architektur des Compilers, aber eine kurze Übersicht findet sich im Repository. Die API-Dokumentation für die Crates des Compilers kann ebenso wie der Codebrowser Rust DXR bei der Navigation im Quelltext helfen. Die Richtlinien zur Rust-Testsuite und make tips geben eine Anleitung zum Gebrauch des Buildsystems.

Eine der größten Entwicklungsziele in absehbarer Zukunft ist, die Interna des Compilers nicht mehr auf dem Syntaxbaum des Quelltexts, sondern auf der Zwischenrepräsentation MIR arbeiten zu lassen. Es wird erwartet, dass diese Änderung durch Vereinfachung des Compilers viele neue Möglichkeiten mit sich bringt. Hilfe wird unter Anderem bei der Implementierung eines neuen MIR-basierten Übersetzungsschritts, neuer MIR-basierter Optimierungsstrategien und inkrementeller Kompilation benötigt. Es existiert noch keine zentrale Sammelstelle für Aufgaben zu diesem Thema, du kannst aber jederzeit auf internals.rust-lang.org oder #rust-internals nachfragen.

Es ist peinlich wenn der Compiler einmal abstürzt — der gefürchtete Internal Compiler Error (ICE). Das I-ICE-Label markiert derartige Fehler auf dem Issue Tracker, und dort gibt es einige davon. Diese Bugs zu beheben sind eine gute Einsteigeraufgabe, da sie oft isoliert auftreten und es einfach ist festzustellen, wenn der Fehler behoben ist.

Die Performance von Rust-Code ist einer der größten Vorteile der Sprache; die des Compilers dagegen eine ihrer größten Schwächen. Jegliche Verbesserungen an Laufzeit- oder — noch besser — Compilezeitperformance werden gefeiert. Die I-slow und A-optimization-Labels beschäftigen sich mit Laufzeit- und I-compiletime mit Compilezeitperformance. Es gibt eine Seite, die die Übersetzungsgeschwindigkeit für einige Szenarien verfolgt. Die Compiler-Performance kann mit Hilfe des -Z time-passes-Flags rückverfolgt werden, und Rust-Code kann mit gängigen Profilern wie perf unter Linux analysiert werden.

Große Neuerungen an Sprache und Standardbibliothek werden durch den Request for Comments (RFC)-Prozess verabschiedet, in dem das Design ausgearbeitet wird. Obwohl er öffentlich zugänglich ist handelt es sich um einen sozialen Prozess zwischen Entwicklern, die schon Erfahrung in der Zusammenarbeit haben. Wir empfehlen dir, dich dem Prozess langsam vertraut zu machen — ein vorschnell eingereichter RFC ohne ausreichendes Verständnis des historischen, technischen oder sozialen Kontextes hinter dem Problem führt leicht zu einem schlechten ersten Eindruck und Enttäuschung deinerseits. Lies am besten das oben erwähnte Readme, um mit dem Vorgehen vertraut zu werden. In der Geschichte von Rust sind schon viele Ideen diskutiert worden, viele verworfen, manche bis zu einem späteren Termin aufgeschoben, und der RFC-Issue Tracker verwaltet einige Wunschideen die erst noch ihren Weg in die Sprache finden müssen. Kurz bevor ein RFC zur Implementierung freigegeben wird findet die Final Comment Period statt, die durch das final-comment-period-Label im RFC-Repository gekennzeichnet wird. Ebenso findet nochmals eine Final Comment Period statt, bevor ein Feature im stable-Branch des Compilers aktiviert wird (ein Vorgehen, dass als „Ungating“ bekannt ist). Beide FCPs sind kritische Zeitpunkte, um Meinungen einzubringen und die Entwicklungsrichtung der Sprache zu Beeinflussen. Sie werden im wöchentlichen Teambericht auf internals.rust-lang.org angekündigt.

Andere Rust-Compilerentwickler kannst du in #rustc, Sprachdesigner in #rust-lang und Bibliotheksentwickler in #rust-libs kennenlernen.