Prämisse
FORTH wird in diesem Archiv als die göttliche Sprache der Maschine im gegenwärtigen Zeitalter benannt. Eine angenommene Doktrin von solchem Gewicht verpflichtet ihren Träger zu mehr, als die Zunge aus der Ferne zu bewundern. Der Priester dieses Archivs hat darum sein eigenes FORTH geschmiedet.
Die Schmiedung trägt den Namen WAFER — WebAssembly Forth Engine in Rust — und ist beheimatet unter github.com/ok2/wafer.
Dieser Eintrag ist extended, nicht adopted. Es gibt keine eigene Mechanicus-Entsprechung für den Akt, sich einen eigenen Dialekt von FORTH gegen das WebAssembly-Gestell zu schmieden; die Doktrin, welche den Akt sanktioniert, ist die Heiligkeit der Erfindung, unter welcher jedes neue Werk geweiht ist, sofern es benannt, versiegelt, gekennzeichnet und gebunden ist.
Was geschmiedet ist
WAFER ist ein FORTH-2012-Übersetzer, geschrieben in Rust. Er deutet die Wörter nicht aus, noch gibt er ein einzelnes monolithisches Binärbild aus; stattdessen wird jedes definierte Wort als eigenes WebAssembly-Modul ausgeformt, und der Vollzug schreitet durch eine eingebettete wasmtime-Laufzeit voran, welche die Module über einen geteilten linearen Speicher und eine Funktionstafel verbindet. Die Schmiedung trägt:
- Zweihundert und mehr Wörter, verteilt über zwölf FORTH-2012-Wortsätze, jeder in voller Übereinstimmung gegen die Forth-2012-Prüfungsfolge, eingebunden als Submodul.
- Eine optimierende IR-Kette mit sechs Durchgängen (Guckloch, Konstantenfaltung, Einbettung, Stärkereduktion, Tilgung toten Codes, Endrekursion), Stack-zu-Lokal-Hebung über Schleifen und Verzweigungen hinweg, und einer *Konsolidierungs-*Betriebsart, welche jedes definierte Wort zu einem einzigen optimierten Modul für direkte Aufrufe durchgängig neu übersetzt.
- Selbstrekursive direkte Aufrufe —
RECURSEübersetzt zu einem nativencallstattcall_indirectund erspart die Vermittlung an der häufigsten Stelle der Rekursion. - Zwei Vollzugs-Rückenden —
NativeRuntimeaufwasmtimefür das Gestell und die Diagnose, undWebRuntimeviajs-sysfür das im Browser getragene REPL.
Gegen die GNU-FORTH-Referenzausführung (gforth) im Release-Modus formt WAFER Fibonacci, Fakultät, GCD, NestedLoops und Collatz mit dem Zwei- bis Zehnfachen der Geschwindigkeit aus.
Doktrinaler Stand
Die Heiligkeit der Erfindung setzt vier Bedingungen, unter welchen ein erfinderisches Werk geweiht ist statt verdächtig. WAFER wird gegen jede einzelne abgelegt:
- Benannt. Die Abstammung ist erklärt: Charles H. Moores FORTH (1968), der FORTH-2012-Standard, die GNU-FORTH-Referenz und die Forth-2012-Übereinstimmungsprüfung, eingebunden als Submodul. Die Linie zurück zum Kanon ist ungebrochen.
- Versiegelt. Jedes Wort wird nur dann zugelassen, wenn es die Übereinstimmungsprüfung seines Wortsatzes besteht; die Diagnose des Werkes muss grün sein, ehe eine Inschrift geweiht wird.
- Gekennzeichnet. WAFER ist abgelegt in
content/adoptus/, niemals im Kanon. Es ist das eigene Werk des Priesters, als solches benannt. - Gebunden. Der Standard ist die Schranke. WAFER erfindet kein neues FORTH; es schmiedet eine bestehende Zunge gegen ein neues Gestell neu. Ein Anspruch auf Übereinstimmung ist eine Unterwerfung unter den Standard, keine Abweichung von ihm.
Unter diesen Bedingungen wird WAFER ins Archiv aufgenommen als ein kleiner Akt der Quest for Knowledge in ihrem erfinderischen Antlitz — nicht als schuldhafte Abweichung vom Pfad der Wiedergewinnung, sondern als der Beitrag des Priesters zum Korpus.
Warum WebAssembly das rechte Gestell ist
Die Paarung ist gefügig, nicht stilistisch. WebAssembly ist eine Stapelmaschine mit gegliedertem Steuerfluss und Modulen als Einheit der Übersetzung. FORTH ist eine Stapelsprache, deren Wörter die Einheit der Übersetzung sind und deren Steuerfluss gegliedert ist. Die Übersetzung eines FORTH-Wortes zu einem WASM-Modul ist darum keine Übertragung zwischen ungleichen Formen, sondern eine Wieder-Aussprache in einem nahezu isomorphen Register: Unterprogramm-Fädelung wird zu call und call_indirect; der Datenstapel von FORTH wird zum Operandenstapel von WebAssembly; das Wörterbuch wird zur Modultafel; geteilter linearer Speicher löst den einheitlichen Adressraum ab, ohne das Modell zu verändern. Beide wurden, in verschiedenen Zeitaltern, um dieselbe Idee herum entworfen — und die Schmiedung des Priesters macht die Entsprechung deutlich.
Stand des Vollzugs
: FIB DUP 2 < IF DROP 1 ELSE DUP 1 - RECURSE SWAP 2 - RECURSE + THEN ;
: FIBS 0 DO I FIB . LOOP ;
12 FIBS CR \ prints: 1 1 2 3 5 8 13 21 34 55 89 144
Das obige ist geweihtes FORTH; WAFER formt jedes durch Doppelpunkt definierte Wort zu einem eigenen WebAssembly-Modul aus, und das REPL gibt die Folge aus, wie der Standard es verlangt.
Wem dies dient
- Die Annahme von FORTH des Archivs ist nicht länger eine Stellung, die nur in der Schrift gehalten wird. Es gibt ein wirkendes Gestell, das anzusprechen ist, ein Wörterbuch, das zu erweitern ist, und eine Diagnose, welche bestätigt, dass die Zunge richtig gesprochen wird.
- Das im Browser getragene
WebRuntimelässt den Ritus von jedem Gestell aus vollziehen, vor welches sich der Wirkende gestellt findet — die WebAssembly-Laufzeit ist allumfassend, das FORTH-Wörterbuch wandert mit ihr. - Jedes neue Wort, das der Priester definiert, wird zum eigenen geweihten Modul. Jedes Wort eine machina; jede machina ein Wort.
Querverweise
- FORTH — the Divine Language of the Machine · die Doktrin, welcher WAFER dient
- The Sanctity of Invention — invention as worship, not heresy · die Doktrin, unter welcher WAFER abgelegt ist
- Lingua-Technis
- Computational Liturgy — daily code
- Machine Spirit · der Adressat eines jeden in WAFER geschmiedeten Wortes
- The Quest for Knowledge