Die Dokumentation der meisten Programmiersprachen ist ein Nachschlagewerk: Sie erklärt die Syntax und überlässt es dem Leser, die dahinterstehenden Ideen selbst zu erschließen. Lale macht bewusst das Gegenteil. Seine Dokumentation ist darauf ausgelegt zu lehren — und zwar die allgemeinen Konzepte der Informatik, nicht nur eine einzelne Sprache.
Das ist eine bewusste Designentscheidung und kein Zufall — sie zeigt sich an drei Stellen.
1. Eine Grammatik, die die kognitive Belastung senkt
Die Sprache selbst ist für Menschen geformt, die noch keine erfahrenen Programmierer sind.
Es gibt genau eine Schleifenkonstruktion, loop, die
for, while und do-while ersetzt:
// Similar to a for loop in many languages
loop var i as i32 from 1 to 10
write i
end loop
// A loop with an exit condition
i = 4
loop
write i
i += 1
end loop when i > 5
// A loop with both entering and exit conditions
loop when i > 5
write i
i += 1
end loop when i > 7
// Infinite loop. Keeps repeating
loop
write "Hello"
end loop
Ein Anfänger muss sich nicht drei verschiedene Schlüsselwörter und deren historische
Unterschiede merken. Er lernt die eine Idee, auf die es ankommt: Eine Schleife kann eine
Bedingung zum Eintreten und/oder eine Bedingung zum Verlassen haben. Derselbe Instinkt
zieht sich durch die ganze Sprache. Operatoren lesen sich wie Englisch
(bitwise and, has value, value of), und Arrays
beginnen bei 1 — entsprechend der Konvention der Mathematik und nicht der von C.
2. Eine Dokumentation, die die verwendeten Begriffe erklärt
Lale verfolgt eine ausdrückliche Dokumentationsphilosophie: Fachbegriffe werden zunächst in einfacher Sprache eingeführt, erst danach folgt der formale Begriff. Das Benutzerhandbuch richtet sich an Schüler der Oberstufe. Die Architekturdokumentation richtet sich an technisch versierte Leser, die sich nie mit Compilerbau beschäftigt haben.
Das ist kein Marketing. Es wird tatsächlich durchgesetzt. Wenn die Architekturdokumentation den Compiler erklärt, sagt sie nicht: „Lale senkt zu SSA ab und führt mem2reg durch.“ Sondern:
Der Compiler wandelt das Programm in die Static-Single-Assignment-Form (SSA) um. In SSA wird jede Variable genau einmal zugewiesen. … mem2reg verschiebt Werte aus dem Speicher in Register, und DSE steht für Dead-Store-Elimination — das Entfernen überflüssiger Speichervorgänge.
Dem Leser wird beigebracht, was eine Zwischenrepräsentation ist, warum ein Compiler eine solche braucht und warum ein Zeiger auf eine lokale Variable eine Funktion nicht verlassen darf — als allgemeines Wissen, mit Lale als konkretem Beispiel.
3. Eine offene Implementierung, der man folgen kann
Der Compiler ist klein genug und gut genug dokumentiert, dass die Dokumentation zugleich als Lehrplan dient. Man kann nachlesen, wie Quellcode zu einem Parse-Baum wird, wie der Parse-Baum zu einer Zwischenrepräsentation wird und wie diese Repräsentation ausgeführt wird — wobei jede Stufe in Prosa erklärt wird, statt als undurchsichtige Blackbox zu bleiben.
Wer die Dokumentation liest, lernt nicht nur Lale. Er lernt, was ein Parser ist, was eine Symboltabelle ist, was ein ABI ist und warum Compilern Speichersicherheit wichtig ist — genau das Wissen, das normalerweise hinter einem Lehrbuch oder einem Kurs steckt.
Warum das wichtig ist
Das Projekt zitiert sogar begutachtete Forschung zur kognitiven Belastung beim Programmierenlernen, denn das Ziel ist konkret: die Hürde zwischen einem neugierigen Menschen und einem funktionierenden Verständnis davon, wie Computer tatsächlich arbeiten, zu senken.
Dies zu fördern bedeutet, Humankapital zu fördern — nicht nur einen Compiler. Eine Sprache, deren Dokumentation die zugrunde liegenden Ideen vermittelt, ist ein Stück öffentliche Infrastruktur: Sie kann jemanden von „Ich kann eine Schleife schreiben“ zu „Ich verstehe, was die Maschine tut“ bringen — ohne Studiengebühren.
Das ist die Behauptung — und das Repository untermauert sie bereits.