Ursprünge
Vor einigen Jahren habe ich einen Pascal-Compiler geschrieben. Die Motivation war einfach: Als Teenager hatte ich aus meinen ersten Programmierlehrbüchern gelernt, dass ein Compiler eine sehr raffinierte Sache ist. Diese Behauptung wurde schließlich zu einer Herausforderung und musste durch Erfahrung getestet werden.
ha.art.plZunächst entstand ein vereinfachter
PL / 0- Compiler, später ein fast voll funktionsfähiger Pascal-Compiler für MS-DOS. Meine Inspirationsquelle war das
Compiler Construction- Buch von Niklaus Wirth, dem Erfinder der Pascal-Sprache. Es ist mir egal, ob Wirths Ansichten jetzt als veraltet gelten und keine direkten Verbindungen zum IT-Mainstream haben oder ob sich die Art des Compiler-Designs geändert hat. Es genügt zu wissen, dass seine Techniken immer noch einfach und elegant sind und - nicht zuletzt -
viel Spaß machen , da es ansprechender ist, eine Programmquelle mit einem handgeschriebenen Parser für rekursiven Abstieg zu analysieren und den Maschinencode zu generieren, als dies zu tun Nennen Sie
Yaccs ,
Bisons und alle ihre Nachkommen.
Das Schicksal meines Compilers war nicht so trivial. Es hat zwei Leben gelebt: das erste in meinen eigenen Händen und das zweite in den Händen von Computerantiquaren aus Polen.
Xd Pascal
Mein neugeborener Compiler hieß
XD Pascal . Es wurden alle Pascal-Anweisungen außer
goto
und
with
. Ersteres schien schwierig zu implementieren zu sein, da es die perfekt hierarchische Programmstruktur zerstören würde. Letzteres könnte die einfachen Bereichsregeln mehrdeutig machen.
Alle Hauptdatentypen wurden ebenfalls unterstützt. Über den Rahmen hinaus waren nur die vorzeichenlosen ganzen Zahlen, Mengen, Aufzählungen und Variantendatensätze - aber all dies sind offensichtlich nicht die täglichen Notwendigkeiten. Trotzdem konnte ich mir das Vergnügen nicht verweigern, Gleitkommazahlen und die 8087-FPU-Arithmetik einzuführen - das war der Einfluss meiner professionellen Neigung zu technischen Berechnungen.
Bei der Implementierung von Prozeduren und Funktionen befürchtete ich, dass die Rekursion und die Speicherung lokaler Variablen auf dem Stapel ein großes Problem darstellen würde. Eine echte, Pascal-spezifische Schwierigkeit bestand jedoch bei den verschachtelten Unterprogrammen. Man kann einen unschuldigen Wunsch haben, von der inneren auf die lokale Variable eines äußeren Unterprogramms zuzugreifen. Die innere Subroutine hat jedoch nicht die Stapelrahmenadresse für die äußere, mit anderen Worten, sie weiß nicht, welchen Ursprung sie mit dem variablen Versatz verwenden soll. Diese Adresse ist als zusätzliches verstecktes Argument an das innere Unterprogramm zu übergeben. Ich nehme an, dass es diese Schwierigkeit war, die die Designer von C gezwungen hat, das Verschachteln von Unterprogrammen vollständig aufzugeben. Aber Pascal hat sie immer noch und diese Funktion kann nicht ignoriert werden.
Der Codegenerator erstellte die einfachsten ausführbaren COM-Dateien für MS-DOS im Real-Modus. Maschinenanweisungen wurden direkt ohne externen Assembler oder Linker generiert. Ich habe 32-Bit-Register für Daten verwendet, aber die Adressierung blieb 16-Bit (ein Segment / Offset-Paar).
Das Speichermodell ähnelte dem "kleinen" (wenn sich noch jemand an diese 16-Bit-Terminologie erinnert): Der Code, die Daten und der Stapel belegten jeweils ein 64-KByte-Segment.
SpeichernutzungDas Generieren von EXEs und das schnelle Umschalten der Segmente schien zu schwierig zu sein, und die engen Einschränkungen des "kleinen" Modells zwangen mich, mich von der Selbstzusammenstellung zu verabschieden. Sicherlich habe ich einige selbstkompilierende Compiler gesehen, deren Code gut in nur ein Segment passt (z. B.
Kontext ). Außer dieser Fähigkeit, sich selbst zu kompilieren, konnten sie jedoch selten etwas Nützliches tun. Stattdessen wollte ich meinen Compiler für numerische Berechnungen und Grafiken geeignet machen. Deshalb habe ich unter anderem die Fraktale, die Gauß-Methode zur Lösung linearer Gleichungen, die schnelle Fourier-Transformation und sogar den Kalman-Filter zur Schätzung der Fehler des Trägheitsnavigationssystems aufgenommen.
Mandelbrot Set Fragment
Schnelle Fourier-Transformation
Fehlerschätzung des TrägheitsnavigationssystemsWas ich schließlich bekam, war dem alten Turbo Pascal 3.0 (ohne OOP) und dem Amateur
BeRo Tiny Pascal sehr ähnlich. Der Autor des letzteren hat es geschafft, es unter Windows selbst zu kompilieren, aber Gleitkomma-Arithmetik und viele Feinheiten der Grammatik geopfert, die ich beibehalten wollte. Unter den moderneren Funktionen erhielt mein XD Pascal die einzeiligen Kommentare (
//
) im Delphi-Stil und die
Result
.
Trotzdem war mein Compiler seit seiner Geburt für den Tod markiert. Pascal geriet irreversibel aus der Mode und MS-DOS war schon lange zuvor archaisch geworden. An einem Tag, an dem ich von einem 32-Bit-Windows XP auf ein 64-Bit-Windows 7 ohne virtuelle DOS-Maschine umgestiegen bin, hielt ich mein Projekt für tot.
Wiederbelebung
Dann ist etwas Seltsames passiert. Nach drei Jahren des Vergessens hat ein Team von polnischen Retrocomputing-Enthusiasten und Atari-Fans meinen Compiler gefunden. Es scheint, dass sie sich nicht viel um abstrakte Probleme wie Selbstzusammenstellung oder Grammatikstrenge kümmerten. Sie brauchten einfach ein praktisches Programmierwerkzeug für ihre Lieblingsmaschine. Mit meinem Projekt haben sie ihren eigenen
Mad Pascal- Compiler für die 6502-Architektur erstellt. Die Sprachgrammatik wurde erweitert, die Unterstützung für separate Einheiten mit den Abschnitten für Schnittstelle und Implementierung, die
goto
Anweisung, vorzeichenlose Ganzzahlen, Mengen und Aufzählungen sowie Inline-Assemblycode hinzugefügt. Anstelle des Maschinencodes wurde der Baugruppencode generiert. Es wurde dann von einem Homebrew-Assembler übersetzt.
Das äußere Erscheinungsbild der Sprache ist dem De-facto-Standard Pascal deutlich näher gekommen. Die Compiler-Interna sehen etwas schrecklich aus, die reservierten Wörter werden mit den Namen der Standard-Subroutinen gemischt, aber das stört die Entwickler nicht. Wie auch immer es aussieht, das Unterfangen ist überraschend realisierbar: Seit drei Jahren wird Mad Pascal regelmäßig aktualisiert, es werden viele Spiele geschrieben, die Autoren nehmen jährlich an der
Silly Venture Retrocomputing-Konferenz teil (für den Link ist möglicherweise VPN erforderlich). Es scheint, dass die Atari-Traditionen in Polen sehr stark sind.
Ein für die polnischen Atari-Fans auffälliges Ereignis ereignete sich im Frühjahr 2018: das Buch
Robbo. Solucja (
Robbo. Walkthrough ), ein Beispiel für experimentelle Literatur, wurde veröffentlicht. Ich muss hier betonen, dass das vor 30 Jahren veröffentlichte
Robbo- Spiel für Atari die älteren polnischen Fans immer noch begeistert und sie mit einer Art patriotischer Freude erfüllt. Generell ist es nicht verwunderlich, dass ein vom Spiel inspiriertes Buch erschien. Aber die lustige Tatsache ist, dass 60 Prozent des Buches, wie die Autoren sagen, das vom Atari-Computer selbst generierte Walkthrough-Tutorial ist. Das Texterzeugungsprogramm ist in Mad Pascal geschrieben.
graczpospolita.plEs sieht so aus, als würden
einige Leute das Buch als ein großartiges Beispiel für zeitgenössische Kunst betrachten:
Es wäre irreführend, dieses Buch nur als Sammlerstück für Robbo- Fans oder allgemeiner für Atari-Fans zu behandeln. Wir beschäftigen uns mit einem seltenen Beispiel für die Wechselwirkung zwischen Videospielkultur und Literatur (in diesem Fall elektronische Literatur), wobei der Ausgangspunkt das "Spiel" und nicht die "Literatur" ist. Für manche ist es bedeutungslos "Kunst um der Kunst willen". Für andere bietet eine solche Frequenzweiche absolut neue Möglichkeiten und Erfahrungen. Nichts hindert Sie daran, eine Version von Robbo zu erstellen, die Sie mithilfe der exemplarischen Vorgehensweise aus dem Buch beenden können. Das Buch passt gut zu meiner Sicht auf die Videospiele als Kunst. Kunst, bei der der Spieler sowohl Empfänger als auch Schöpfer sein kann - wenn während des "Spiels" ein "Publikum" den Spieler beobachtet, der seine eigene "Spiel" -Historie erstellt. Der Inhalt des Buches kann mithilfe der Elemente der exemplarischen Vorgehensweise aus dem Buch an eine Performance-Show mit einem Schauspieler angepasst werden, der Robbo spielt. Um nicht unbegründet zu bleiben: Die Leistung basiert auf Robbo. Solucja fand am 11. Mai 2018 in der Bunker- Galerie für zeitgenössische Kunst in Krakau während der Präsentation des Buches zur Ausstellung Unerschöpflichkeit statt.
Eine Performance-Show in Krakau. Es lohnt sich, einen Compiler geschrieben zu haben.