Ziel des Experiments: PlanJinn, das autonome Expert-Board-Workflow-System, sollte eine komplette Modula-2-Toolchain von A bis Z erstellen — von der Spezifikation über die Implementierung bis zur Abnahmetest-Suite. Projektseite: PlanJinn in der KI-Werkstatt.
M2 Modula-2 Toolchain 1.1.1 ABGESCHLOSSEN
Das M2 Modula-2 Toolchain ist ein eigenständiger ISO-Modula-2-Subset-Compiler, der native i386-PE32-Windows-Programme erzeugt. Die komplette Pipeline — Lexer, Parser, semantische Analyse, i386-Codegenerator, i386-Assembler, COFF-Object-Writer und PE32-Linker — steckt in einem einzigen Executable. Es gibt keinen externen Assembler, keinen externen Linker, keine externe Runtime und keinen sonstigen Compiler. Das Projekt ist abgeschlossen und wird von uns nicht weiterentwickelt — es steht inklusive komplettem Quellcode zum Mitnehmen bereit.
Entstehung: ein PlanJinn-Testlauf mit Bruch
Dieses Toolchain war nie als Produkt geplant. Es entstand als Testartefakt des PlanJinn-Projekts — und genau so, mit allen Umbrüchen, geben wir es weiter.
PlanJinn steuerte den Provider AgnesAI durch Definition, Struktur, Implementierung und Zwischenprüfungen. Bis zu diesem Punkt entstand das Toolchain zu etwa siebzig Prozent vollständig autonom — ohne manuelle Codeeingriffe.
Ein Hardware-Crash des Arbeitsrechners unterbrach den Test mitten in der Arbeit. Der autonome Lauf endete an dieser Stelle — das Projekt blieb als unvollständiger Zwischenstand zurück.
Die verbleibenden dreißig Prozent — Vervollständigung der Pipeline, Härtung, Akzeptanzsuite und Release-Paket — wurden anschließend mit GLM 5.3 als Provider zu Ende geführt, wieder über den PlanJinn-Workflow.
Das Ergebnis ist ein funktionierender, getesteter Compiler — und zugleich der Beweis, was ein KI-getriebener Workflow leistet und wo er abbricht. Wir geben es inklusive Quellcode ab und entwickeln es nicht weiter.
Download
M2 Toolchain 1.1.1 (ZIP) ZIP, ca. 154 KB — Binary, kompletter Quellcode, Beispiele, Tests und Build-SkriptAuf einen Blick
Was die Toolchain kann
Alles in einem Executable
Lexer, Parser, semantische Analyse, i386-Codegenerator, i386-Assembler, COFF-Object-Writer und PE32-Linker sind integriert. Kein externes Werkzeug wird benötigt — weder zum Übersetzen noch zum Ausführen.
Echte PE32-Programme
Erzeugte Programme sind echte i386-Konsolen-Executables, die nativ unter Windows laufen und ihr Ergebnis als Prozess-Exit-Code zurückgeben. Der integrierte Linker baut eine echte PE-Importtabelle (kernel32: ExitProcess, GetStdHandle, WriteFile).
Standardmodule eingebaut
12 Builtins aus drei Standardmodulen (SYSTEM, TEXTIO, WHOLEIO) werden zur Compilezeit aufgelöst. Jedes Builtin ist eine echte i386-Routine, die in jedes Programm eingebettet wird — echte Konsolenausgabe ohne Runtime-Paket.
Deterministisch
Zwei saubere Übersetzungen desselben Quelltexts erzeugen byte-identische .s-, .obj- und .exe-Dateien. Keine Zeitstempel, keine Zufälligkeit — reproduzierbare Builds inklusive.
Fail-closed
Ungültige Programme werden mit klaren datei(zeile): error:-Diagnosen abgelehnt und hinterlassen kein Artefakt. Fehler werden nicht wegkompiliert, sondern sichtbar abgelehnt.
Icons eingebettet
Der integrierte Linker bettet ein Modula-2-Programm-Icon in die .rsrc-Sektion jedes erzeugten Programms ein; die Toolchain selbst erhält ihr eigenes Icon über windres. Beide Icons werden deterministisch per Skript generiert.
Aufruf
Standardmodul-Builtins
SYSTEM.HALT(int)SYSTEM.ASSERT(bool)TEXTIO.WRITE(s,len)TEXTIO.WRITELN(s,len)WHOLEIO.WRITEINT(n,w)WHOLEIO.WRITELNINT(n,w)WHOLEIO.WRITECARD(n,w)WHOLEIO.WRITELNCARD(n,w)WHOLEIO.WRITEBOOL(b)WHOLEIO.WRITELNBOOL(b)WHOLEIO.WRITECHAR(c)WHOLEIO.WRITELNCHAR(c)Unterstütztes Subset von ISO Modula-2
| Kategorie | Unterstützung |
|---|---|
| Module | MODULE name; ... BEGIN ... END name. (eine Übersetzungseinheit) |
| Imports | IMPORT TEXTIO, WHOLEIO, SYSTEM; — geparst und gegen das Builtin-Register geprüft |
| Typen | INTEGER, CARDINAL, BOOLEAN (SHORTINT/LONGINT alias INTEGER); INTEGER/CARDINAL mischbar, BOOLEAN streng |
| Deklarationen | CONST (zur Compilezeit gefaltet), Modul-VAR (statischer Speicher), flache PROCEDUREs mit Wert- und VAR-Parametern, Funktionsprozeduren mit RETURN |
| Anweisungen | Zuweisung, Aufrufe (auch parameterlos), IF/ELSIF/ELSE, WHILE, REPEAT/UNTIL, FOR/TO/BY (konstante Schrittweite, beide Vorzeichen), EXIT, RETURN |
| Ausdrücke | Volle Präzedenz: Relationen (= # < <= > >=), additive (+ - OR), multiplikative (* DIV MOD AND), unäre - NOT, Klammern, Integer-Literale, TRUE/FALSE, Funktionsaufrufe; geschachtelte (* Kommentare *) |
| Prozeduren | Mutuelle Rekursion ohne FORWARD (Prozeduren auf Modulebene sind vordeklariert) |
| Strings | Literal "text" als erstes Argument von TEXTIO.WRITE/WRITELN (read-only in .text, Länge als versteckter Parameter) |
Dokumentierte Abweichungen von ISO/IEC 10514-1
DIV/MOD nutzen truncierende (C-artige) statt floored-Semantik · BY-Schrittweiten müssen Compilezeit-Konstanten sein · Funktionsprozeduren benötigen mindestens ein RETURN (keine exhaustive Pfadanalyse) · alles außerhalb des Subsets — Arrays, Records, Mengen, Pointer, REAL, CASE, LOOP, WITH, opaque Typen, Coroutinen, Exceptions, verschachtelte Prozeduren, 45 weitere Standardmodule — wird mit klarer Diagnose abgelehnt statt falsch übersetzt.
Wie das Toolchain geprüft wurde
- Erzeugte Programme sind echte i386-PE32-Konsolen-Executables, die nativ laufen und ihr Ergebnis als Exit-Code zurückgeben.
- Die vier Standardmodul-Tests prüfen zusätzlich die byte-exakte Konsolenausgabe (Strings, vorzeichenbehaftete und vorzeichenlose Ganzzahlen mit Breitenpadding, TRUE/FALSE).
- Ungültige Programme werden abgelehnt und hinterlassen kein Artefakt (fail-closed).
- Stresstests: Quelltexte bis 54 KB mit 400 Modulvariablen, 70 Prozeduren, geschachtelten Schleifen,
FORmit negativer Schrittweite,VAR-Parametern und mutueller Rekursion. - Determinismus: zwei saubere Übersetzungen desselben Quelltexts erzeugen byte-identische Ausgaben.
Die Toolchain aus dem Quellcode bauen
Das ZIP enthält den kompletten, baubaren Quellcode. Sie müssen dem mitgelieferten Binary nicht vertrauen — bauen Sie es selbst, in unter einer Minute.
| Werkzeug | Benötigt für | Herkunft |
|---|---|---|
| MinGW-w64 GCC (beliebiges C99) | Übersetzen der Toolchain selbst | WinLibs, MSYS2 oder winget install BrechtSanders.WinLibs.POSIX.UCRT |
windres (binutils) | Einbetten des Toolchain-Icons | in jedem MinGW-w64 enthalten |
| Python 3 + Pillow | nur zum Regenerieren der Icons (optional) | pip install pillow |
Das Skript kompiliert zunächst das Icon per windres (optional — fehlt windres, entsteht ein Exe ohne Icon, nur mit Warnung) und dann gcc -std=c99 -O2 über alle Quellcodes. SOURCE_DATE_EPOCH=1700000000 pinnt den PE-Zeitstempel: zwei Neubauten desselben Baums sind byte-identisch. Fehlt gcc, bricht das Skript kontrolliert ab — MinGWs bin\ auf PATH setzen oder die GCC=-Zeile oben im Skript anpassen.
Eigenen Build verifizieren
Die Suite nutzt bevorzugt bin\ — wer sein frisches Binary nach bin\ kopiert, stellt sicher, dass wirklich der eigene Build geprüft wird. Die Modula-2-Pipeline braucht zur Laufzeit keine externen Werkzeuge; gcc und windres werden nur einmalig zum Bau der Toolchain selbst gebraucht.
Lieferumfang des ZIP
Status und Lizenz
Wird nicht weiterentwickelt
Das Projekt ist für uns abgeschlossen. Wir entwickeln es nicht weiter und bieten dafür keinen Support. Wer es erweitern möchte: Der komplette Quellcode liegt bei — die Akzeptanzsuite zeigt, woran man sich orientieren kann.
CC0 Public Domain
Die Software ist gemeinfrei gewidmet (CC0 1.0): nutzen, kopieren, ändern, veröffentlichen und verteilen — für jeden Zweck, ohne Erlaubnis und ohne Bedingungen. Ohne jede Gewährleistung, bereitgestellt "wie besehen".
Herausgeber: Theo Gottwald, Herrenstr. 11, 76706 Dettenheim, Deutschland · theo.gottwald@it-berater.org · Entstanden als Testartefakt des PlanJinn-Projekts (autonomer Expert-Board-Workflow).
Download-Entwicklung
Tägliche Abrufe aller angebotenen Downloads der letzten 28 Tage (rollierend). Jede Download-Datei ist dauerhaft durch eine eigene Farbe gekennzeichnet.