Die Ursprünge
Vor einigen Jahren habe ich den Pascal-Compiler geschrieben. Die Motivation war einfach: In meiner Jugend habe ich aus meinen ersten Programmierbüchern gelernt, dass der Compiler eine äußerst komplizierte Sache ist. Diese Aussage ist dem Gehirn ein Dorn im Auge und erforderte letztendlich einen Versuch.
ha.art.plZunächst wurde der einfachste
PL / 0- Compiler geboren, aus dem allmählich ein fast voll funktionsfähiger Pascal-Compiler für MS-DOS entstand. Ich wurde von dem Buch
Compiler Construction inspiriert, das vom Schöpfer der Sprache Pascal Nicklaus Wirth geschrieben wurde. Und selbst wenn die Ansichten von Wirth bereits veraltet sind und jegliche Verbindung zu den Realitäten der IT verloren haben und Compiler dies überhaupt nicht tun, wie Wirth lehrte. Die Methoden sind jedoch immer noch einfach, elegant und vor allem - sie
bereiten Freude , da es viel attraktiver ist, den Programmtext durch rekursiven Abstieg unabhängig zu analysieren und Maschinencode zu generieren, als die Hilfe von
Yaks ,
Bisons und all ihren Nachfolgern in
Anspruch zu nehmen .
Das Schicksal meines Compilers war nicht das trivialste. Er lebte zwei Leben: das erste - in meinen Händen, das zweite - in den Händen polnischer Kenner der Computerantike.
Xd Pascal
Mein frisch gebackener Compiler heißt
XD Pascal . Es wurden alle Pascal-Operatoren außer
goto
und
with
. Die erste schien schwierig zu implementieren, da sie die ideal hierarchische Struktur des Programms zerstörte. Die zweite - verursachte Verwirrung mit dem Umfang der Namen.
Alle wichtigen Datentypen wurden unterstützt. Nur vorzeichenlose Ganzzahlen, Mengen, Aufzählungen und Varianteneinträge wurden aus dem Geltungsbereich herausgenommen - all dies ist jedoch eindeutig keine wesentliche Notwendigkeit. Trotzdem konnte ich mir das Vergnügen der Gleitkommazahlen und ihrer Arithmetik auf dem 8087-Coprozessor nicht verweigern - dies beeinträchtigte die professionelle Vorliebe für technische Berechnungen.
Bei der Implementierung von Prozeduren und Funktionen befürchtete ich, dass die Rekursion und das Speichern lokaler Variablen auf dem Stapel ein großes Problem darstellen würde. Die eigentliche Schwierigkeit, die für Pascal spezifisch ist, lag jedoch an einem völlig anderen Ort - bei der Arbeit mit verschachtelten Prozeduren. Es kann ein völlig unschuldiges Bedürfnis entstehen, sich auf die lokale Variable der externen Prozedur von der internen zu beziehen. Die interne Prozedur hat jedoch nicht die Adresse des Stapelrahmens der externen Prozedur - die interne Prozedur weiß nicht, woraus die Adresse der Variablen gelesen werden soll. Diese Adresse muss immer über einen zusätzlichen versteckten Parameter an die interne Prozedur übergeben werden. Ich vermute, dass es diese Komplikation war, die C-Entwickler dazu veranlasste, die Verschachtelung von Funktionen vollständig aufzugeben. In Pascal sind sie es jedoch, und damit muss gerechnet werden.
Der Codegenerator erstellte die einfachsten ausführbaren COM-Dateien für den MS-DOS-Real-Modus. Maschinencode wurde direkt ohne die Hilfe eines externen Assemblers oder Linkers generiert. Für die Daten habe ich die 32-Bit-Register der 80386-Architektur verwendet, und die Adressierung blieb 16-Bit in Form eines Segment-Offset-Paares.
Das Speichermodell entsprach in etwa dem "kleinen" (wenn sich jemand anderes an diese Terminologie der 16-Bit-Ära erinnert): Für einen Code, globale Daten und einen Stapel wurde ein 64-kb-Segment zugewiesen.
SpeichernutzungDas Generieren von EXE-Dateien und das schnelle Wechseln von Segmenten schien etwas überwältigend, und der enge Umfang des „kleinen“ Modells ließ mich von der Idee der Selbstkompilierung Abschied nehmen. Natürlich bin ich auf selbstkompilierende Compiler gestoßen, deren Code vollständig in ein Segment passt (z. B.
Kontext ). Sie wussten jedoch selten, wie man etwas Nützliches außer dieser Selbstzusammenstellung macht. Ich wollte meinen Compiler zumindest ein wenig für numerische Berechnungen und Grafikausgaben geeignet machen. Daher erschienen unter den Beispielen von Programmen Fraktale, die Lösung linearer Gaußscher Gleichungen, die schnelle Fourier-Transformation und sogar die Schätzung von Fehlern des Trägheitsnavigationssystems durch das Kalman-Filter.
Fragment des Mandelbrot-Sets
Schnelle Fourier-Transformation
Fehlerschätzung des TrägheitsnavigationssystemsWas ich als Ergebnis bekam, ähnelte vor allem dem alten Turbo Pascal 3.0 (immer noch ohne OOP) und dem Amateur
BeRo Tiny Pascal . Der Autor des letzteren kam mit der Selbstkompilierung unter Windows zurecht, opferte jedoch Gleitkomma-Arithmetik und viele Feinheiten der Grammatik, die ich beobachten wollte. Von den moderneren Funktionen in meinem XD Pascal wurden einzeilige Kommentare (
//
) von Delphi und die automatische
Result
angezeigt.
Mein Compiler war jedoch von Geburt an mit dem Siegel des Todes gekennzeichnet. Pascal ist bereits irreversibel aus der Mode gekommen, und MS-DOS ist längst archaisch geworden. Als ich an diesem Tag ohne virtuelle DOS-Maschine von 32-Bit-Windows XP auf 64-Bit-Windows 7 umstieg, vergrub ich mein Projekt mental.
Wiedergeburt
Dann passierte etwas Seltsames. Nach drei Jahren völliger Vergessenheit fand eine Gruppe polnischer Retrocomputing-Enthusiasten und Atari-Liebhaber meinen Compiler. Anscheinend beschäftigten sie die abstrakten Probleme der Selbstzusammenstellung und die Genauigkeit der Grammatikimplementierung nicht sonderlich. Sie brauchten nur ein praktisches Programmierwerkzeug für ihr Lieblingsauto. Aus meinem Projekt haben sie ihren eigenen Compiler
Mad Pascal für die Architektur 6502 erstellt. Die Grammatik der Sprache wuchs, Unterstützung für Module mit Abschnitten der Schnittstelle und Implementierung,
goto
Operator, vorzeichenlose Ganzzahlen, Mengen und Aufzählungen, Assembler-Einfügungen erschienen. Anstelle von Maschinencode wird jetzt Assembler-Code generiert. Die endgültige Sendung wurde von einem Monteur seines eigenen Designs gemacht.
Äußerlich ist die Sprache dem tatsächlichen Standard von Pascal spürbar näher gekommen. Im Inneren sieht der Compiler etwas einschüchternd aus, die reservierten Wörter werden mit den Namen der Standardprozeduren gemischt, aber das stört die Autoren überhaupt nicht. Egal wie es aussieht, es stellte sich als überraschend hartnäckig heraus: Mad Pascal wurde seit drei Jahren regelmäßig aktualisiert, es hat viele Spiele geschrieben und Autoren sprechen jährlich auf der
Silly Venture-Rückkonferenz (Link erfordert ein VPN). Es besteht das Gefühl, dass die Atari-Traditionen in Polen im Allgemeinen sehr stark sind.
Im Frühjahr 2018 fand eine Veranstaltung statt, die für die polnische Partei der Atari-Fans bemerkenswert war: das Buch
„Robbo. Solucja " (" Robbo. Passage ") im Genre der experimentellen Literatur. Hier muss ich sagen, dass das vor 30 Jahren veröffentlichte Spiel
Robbo for Atari immer noch die Herzen der Polen der älteren Generation erregt und sie mit patriotischer Begeisterung erfüllt. Im Allgemeinen ist es nicht verwunderlich, dass es ein Buch gab, das dem Spiel gewidmet war. Das Lustige ist, dass es laut den Autoren zu 60% aus den Anweisungen zum Weitergeben des vom Atari-Computer selbst generierten Spiels besteht. Das Generierungsprogramm ist auf demselben Mad Pascal geschrieben.
graczpospolita.plUnd es scheint, dass
einige das Buch als ein würdiges Beispiel moderner Kunst empfanden:
Es wäre falsch, das Buch nur als Sammlerstück für Robbo-Fans oder allgemeiner für Atari-Fans zu behandeln. Wir müssen uns mit einem seltenen Fall einer Kollision der Kultur von Videospielen mit Literatur (in diesem Fall elektronisch) befassen, wenn der Ausgangspunkt „Spiel“ und nicht „Literatur“ ist. Für manche ist dies eine bedeutungslose Kunst für die Kunst. Für andere bringt diese Kreuzung völlig neue Möglichkeiten und Erfahrungen. Nichts hindert Sie daran, eine Version von Robbo zu erstellen, die Sie mit dem „Durchgang“ aus dem Buch beenden können. Das Buch stimmt gut mit meiner Auffassung von Spielen als Kunst überein. Eine Kunst, in der der Spieler sowohl wahrnehmen als auch kreativ sein kann - wenn während des „Spiels“ ein „Publikum“ den Spieler beobachtet, der seine eigene Geschichte des „Spiels“ erstellt. Der Inhalt des Buches kann für die Aufführung mit einem Spieler angepasst werden, der Robbo übergibt, indem er die Elemente der "Schritt-für-Schritt-Anleitung" aus dem Buch verwendet. Um nicht unbegründet zu bleiben: Leistung basierend auf „Robbo. Solucja “fand am 11. Mai 2018 in der Bunker Gallery of Modern Art in Krakau während der Präsentation des Buches im Rahmen der Unerschöpflichen Ausstellung statt.
Auftritt in Krakau. Aus diesem Grund hat es sich gelohnt, einen Compiler zu schreiben.