Les origines
Il y a plusieurs années, j'ai écrit un compilateur Pascal. La motivation était simple: à l'adolescence, j'avais appris de mes premiers manuels de programmation qu'un compilateur était une chose très sophistiquée. Cette affirmation est finalement devenue un défi et devait être testée par l'expérience.
ha.art.plTout d'abord, un compilateur
PL / 0 simpliste a vu le jour, puis un compilateur Pascal presque entièrement fonctionnel pour MS-DOS en est issu. Ma source d'inspiration était le livre
Compiler Construction de Niklaus Wirth, l'inventeur du langage Pascal. Peu m'importe si les vues de Wirth sont maintenant considérées comme obsolètes et n'ont aucun lien direct avec le courant dominant de l'informatique, ou si la mode de conception du compilateur a changé. Il suffit de savoir que ses techniques sont toujours simples, élégantes et - enfin et surtout -
très amusantes , car il est plus attrayant d'analyser une source de programme avec un analyseur de descente récursif manuscrit et de générer le code machine, plutôt que de appelez
yaccs ,
bisons et tous leurs descendants.
Le destin de mon compilateur n'était pas si trivial. Il a vécu deux vies: la première entre mes mains et la seconde entre les mains d'antiquaires informatiques polonais.
Xd pascal
Mon compilateur nouveau-né s'appelait
XD Pascal . Il supportait toutes les instructions Pascal sauf
goto
et
with
. Le premier semble difficile à mettre en œuvre, car il détruirait la structure parfaitement hiérarchisée du programme. Ce dernier pourrait rendre ambiguë les règles de portée simples.
Tous les principaux types de données ont également été pris en charge. Au-delà de la portée, il n'y avait que les entiers non signés, les ensembles, les énumérations et les enregistrements de variantes - mais tous ceux-ci ne sont évidemment pas les nécessités quotidiennes. Néanmoins, je ne pouvais pas me refuser le plaisir d'introduire des nombres à virgule flottante et l'arithmétique 8087 FPU - c'était l'impact de ma dépendance professionnelle aux calculs d'ingénierie.
Lors de l'implémentation de procédures et de fonctions, j'avais peur que la récursivité et le stockage des variables locales sur la pile soient un gros problème. Cependant, une vraie difficulté spécifique à Pascal était avec les sous-programmes imbriqués. On peut avoir un désir innocent d'accéder à la variable locale d'un sous-programme externe depuis l'intérieur. Cependant, le sous-programme interne n'a pas l'adresse de trame de pile pour celui externe, en d'autres termes, il ne sait pas quelle origine utiliser avec l'offset variable. Cette adresse doit être transmise au sous-programme interne comme argument caché supplémentaire. Je suppose que c'est cette difficulté qui a forcé les concepteurs de C à abandonner complètement l'imbrication des sous-routines. Mais Pascal les a toujours, et cette fonctionnalité ne peut pas être ignorée.
Le générateur de code a créé les exécutables COM les plus simples pour MS-DOS en mode réel. Les instructions machine ont été générées directement, sans assembleur ni éditeur de liens externes. J'ai utilisé des registres 32 bits pour les données, mais l'adressage est resté 16 bits (une paire segment / décalage).
Le modèle de mémoire était similaire au `` petit '' (si quelqu'un se souvient encore de cette terminologie de l'ère 16 bits): le code, les données et la pile occupaient chacun un segment de 64 Ko.
Utilisation de la mémoireLa génération d'EXE et la commutation des segments à la volée semblaient être trop difficiles, et les limitations strictes du «petit» modèle m'ont forcé à dire au revoir à l'auto-compilation. J'ai certainement vu des compilateurs auto-compilateurs dont le code cadrait bien dans un seul segment (par exemple,
Context ). Cependant, ils pouvaient rarement faire quelque chose d'utile en plus de cette capacité à se compiler. Au lieu de cela, je souhaitais rendre mon compilateur adapté aux calculs numériques et graphiques. C'est pourquoi j'ai inclus, entre autres exemples, les fractales, la méthode de Gauss pour résoudre des équations linéaires, la transformée de Fourier rapide et même le filtre de Kalman pour estimer les erreurs du système de navigation inertielle.
Fragment de jeu de Mandelbrot
Transformation de Fourier rapide
Estimation des erreurs du système de navigation inertielleCe que j'ai finalement obtenu était très similaire à l'ancien Turbo Pascal 3.0 (sans OOP) et à l'amateur
BeRo Tiny Pascal . L'auteur de ce dernier a réussi à l'auto-compiler sous Windows, mais a sacrifié l'arithmétique à virgule flottante et de nombreuses subtilités de la grammaire, que je souhaitais conserver. Parmi les fonctionnalités plus modernes, mon XD Pascal a obtenu les commentaires sur une seule ligne de style Delphi (
//
) et la variable
Result
.
Néanmoins, depuis sa naissance, mon compilateur a été marqué pour la mort. Pascal se démodait irréversiblement, et MS-DOS était devenu archaïque bien avant. Un jour où je suis passé d'un Windows XP 32 bits à un Windows 7 64 bits sans machine virtuelle DOS, j'ai considéré que mon projet était mort.
Revival
Puis quelque chose d'étrange s'est produit. Après trois ans d'oubli, une équipe de passionnés de rétrocomputing polonais et de fans d'Atari a trouvé mon compilateur. Il semble qu'ils ne se soucient pas beaucoup des problèmes abstraits comme l'auto-compilation ou la rigueur grammaticale. Ils avaient simplement besoin d'un outil de programmation pratique pour leur machine préférée. À l'aide de mon projet, ils ont construit leur propre compilateur
Mad Pascal pour l'architecture 6502. La grammaire du langage a été étendue, le support a été ajouté pour les unités séparées avec les sections d'interface et d'implémentation, l'
goto
, les entiers non signés, les ensembles et les énumérations, le code d'assemblage en ligne. Au lieu du code machine, le code assembleur a été généré. Il a ensuite été traduit par un assembleur homebrew.
L'aspect extérieur du langage est devenu beaucoup plus proche du standard de facto Pascal. Les internes du compilateur sont quelque peu horribles, les mots réservés sont mélangés avec les noms des sous-programmes standard, mais cela ne dérange pas les développeurs. Quoi qu'il en soit, l'effort est étonnamment viable: pendant trois ans, Mad Pascal a été régulièrement mis à jour, de nombreux jeux y sont écrits, les auteurs participent chaque année à la conférence de retrocomputing
Silly Venture (le lien peut nécessiter un VPN). Il semble que les traditions Atari soient très fortes en Pologne.
Un événement notable pour les fans polonais d'Atari s'est produit au printemps 2018: le livre
Robbo. Solucja (
Robbo. Walkthrough ), un exemple de littérature expérimentale, a été publié. Je dois souligner ici que le jeu
Robbo pour Atari, qui a été publié il y a 30 ans, excite toujours les fans polonais plus âgés et les remplit d'une sorte de joie patriotique. D'une manière générale, il n'est pas surprenant qu'il soit apparu un livre inspiré du jeu. Mais le fait drôle est que 60% du livre, comme le disent les auteurs, est le didacticiel pas à pas généré par l'ordinateur Atari lui-même. Le programme de génération de texte est écrit en Mad Pascal.
graczpospolita.plIl semble que
certaines personnes considèrent le livre comme un excellent exemple de l'art contemporain:
Il serait trompeur de traiter ce livre comme un objet de collection pour les fans de Robbo , ou, plus généralement, pour les fans d'Atari. Nous traitons d'un rare exemple d'interaction entre la culture du jeu vidéo et la littérature (dans ce cas, la littérature électronique), où le point de départ est le «jeu» et non la «littérature». Pour certains, il s'agit d'un «art pour l'art» sans signification. Pour d'autres, un tel croisement offre des opportunités et une expérience absolument nouvelles. Rien ne vous empêche de créer une version de Robbo que vous pouvez terminer d'utiliser la «procédure pas à pas» du livre. Le livre correspond bien à ma vision des jeux vidéo comme de l'art. Art, dans lequel le joueur peut être à la fois le destinataire et le créateur - si pendant le «jeu» il y a un «public» qui regarde le joueur créer sa propre histoire de «jeu». Le contenu du livre peut être adapté à un spectacle de performance avec un acteur jouant Robbo en utilisant les éléments de la «procédure pas à pas» du livre. Afin de ne pas rester sans fondement: la performance basée sur Robbo. Solucja a eu lieu le 11 mai 2018 à la galerie d'art contemporain Bunker à Cracovie, lors de la présentation du livre accompagnant l'exposition Inexhaustibility .
Un spectacle de performance à Cracovie. Cela vaut la peine d'avoir écrit un compilateur.