Les origines
Il y a quelques années, j'ai écrit le compilateur Pascal. La motivation était simple: dans ma jeunesse, j'ai appris de mes premiers livres de programmation que le compilateur est une chose extrêmement compliquée. Cette déclaration est devenue une épine dans le cerveau et a finalement nécessité un procès.
ha.art.plTout d'abord, le compilateur
PL / 0 le plus simple est né, et de là un compilateur Pascal presque entièrement fonctionnel pour MS-DOS s'est progressivement développé. Je me suis inspiré du livre
Compiler Construction , écrit par le créateur du langage Pascal Nicklaus Wirth. Et même si les vues de Wirth sont déjà dépassées et ont perdu tout lien avec les réalités de l'informatique, et les compilateurs ne le font pas du tout comme Wirth l'a enseigné. Cependant, ses méthodes sont toujours simples, élégantes et surtout - elles
apportent de la joie , car il est beaucoup plus attrayant d'analyser indépendamment le texte du programme par descente récursive et de générer du code machine que d'appeler à l'aide de
yaks , de
bisons et de tous leurs successeurs.
Le sort de mon compilateur n'a pas été le plus trivial. Il a vécu deux vies: la première - entre mes mains, la seconde - entre les mains des connaisseurs polonais des antiquités informatiques.
Xd pascal
Mon compilateur fraîchement cuit s'appelle
XD Pascal . Il supportait tous les opérateurs Pascal sauf
goto
et
with
. Le premier semble difficile à mettre en œuvre, car il détruit la structure idéalement hiérarchique du programme. Le second - a créé une confusion avec la portée des noms.
Tous les principaux types de données ont été pris en charge. Seuls les entiers non signés, les ensembles, les énumérations et les entrées de variantes ont été exclus de la portée - cependant, tout cela n'est clairement pas une nécessité essentielle. Néanmoins, je ne pouvais pas me refuser le plaisir des nombres à virgule flottante et leur arithmétique sur le coprocesseur 8087 - cela affectait le penchant professionnel pour les 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, la vraie difficulté, spécifique à Pascal, résidait dans un tout autre endroit - dans le travail avec des procédures imbriquées. Un besoin tout à fait innocent peut surgir pour se référer à la variable locale de la procédure externe à partir de l'interne. Cependant, la procédure interne n'a pas l'adresse du cadre de pile de la procédure externe - la procédure interne ne sait pas de quoi lire l'adresse de la variable. Cette adresse doit toujours être transmise à la procédure interne via un paramètre caché supplémentaire. Je soupçonne que c'est cette complication qui a poussé les développeurs C à abandonner complètement l'imbrication des fonctions. Cependant, en Pascal, ils le sont, et cela doit être pris en compte.
Le générateur de code a créé les exécutables COM les plus simples pour le mode réel MS-DOS. Le code machine a été généré directement, sans l'aide d'un assembleur ou éditeur de liens externe. Pour les données, j'ai utilisé les registres 32 bits de l'architecture 80386, et l'adressage est resté 16 bits, sous la forme d'une paire segment-offset.
Le modèle de mémoire correspondait grosso modo au "petit" (si quelqu'un d'autre se souvient de cette terminologie de l'ère 16 bits): pour un code, des données globales et une pile, un segment de 64 ko était alloué.
Utilisation de la mémoireLa génération de fichiers EXE et la commutation de segments à la volée semblait un peu écrasante, et l'étendue restreinte du «petit» modèle m'a fait dire adieu à l'idée de l'auto-compilation. Bien sûr, j'ai rencontré des compilateurs auto-compilateurs dont le code tient entièrement dans un segment (par exemple,
Context ). Cependant, ils savaient rarement comment faire autre chose que cette auto-compilation. Je voulais que mon compilateur soit au moins un peu adapté aux calculs numériques et à la sortie graphique. Par conséquent, parmi les exemples de programmes, des fractales sont apparues, solution d'équations gaussiennes linéaires, transformée de Fourier rapide, et même estimation par le filtre de Kalman des erreurs du système de navigation inertielle.
Fragment de l'ensemble Mandelbrot
Transformation de Fourier rapide
Estimation des erreurs du système de navigation inertielleCe que j'ai obtenu en conséquence, ressemblait surtout à l'ancien comme le monde Turbo Pascal 3.0 (toujours sans OOP) et l'amateur
BeRo Tiny Pascal . L'auteur de ce dernier a fait face à l'auto-compilation sous Windows, mais il a sacrifié l'arithmétique à virgule flottante et de nombreuses subtilités de grammaire que je voulais observer. Parmi les fonctionnalités les plus modernes de mon XD Pascal, les commentaires sur une seule ligne (
//
) empruntés à Delphi et la
Result
automatique
Result
.
Cependant, dès ma naissance, mon compilateur était marqué du sceau de la mort. Pascal est déjà passé de façon irréversible à la mode, et MS-DOS est depuis longtemps devenu un archaïque. Ce jour-là, lorsque je suis passé de Windows XP 32 bits à Windows 7 64 bits sans machine virtuelle DOS, j'ai enterré mentalement mon projet.
Renaissance
Puis une chose étrange s'est produite. Après trois ans d'oubli total, un groupe d'amateurs polonais de rétrocomputing et d'amateurs d'Atari ont trouvé mon compilateur. Apparemment, les problèmes abstraits de l'auto-compilation et la rigueur de la mise en œuvre de la grammaire ne les concernaient pas beaucoup. Ils avaient juste besoin d'un outil de programmation pratique pour leur voiture préférée. À partir de mon projet, ils ont créé leur propre compilateur
Mad Pascal pour l'architecture 6502. La grammaire du langage s'est développée, le support des modules avec des sections de l'interface et de l'implémentation, l'opérateur
goto
, des entiers non signés, des ensembles et des énumérations, des insertions d'assembleurs sont apparues. Au lieu du code machine, le code assembleur est maintenant généré. Sa diffusion finale a été réalisée par un assembleur de son propre design.
Extérieurement, le langage est devenu sensiblement plus proche du standard actuel de Pascal. À l'intérieur, le compilateur semble quelque peu intimidant, les mots réservés sont mélangés avec les noms des procédures standard, mais cela ne dérange pas du tout les auteurs. Peu importe à quoi cela ressemble, cela s'est révélé étonnamment tenace: Mad Pascal a été régulièrement mis à jour pendant trois ans, il a écrit de nombreux jeux, les auteurs parlent chaque année lors de rétroconférences
Silly Venture (le lien nécessite un VPN). On a le sentiment qu'en Pologne, les traditions Atari sont généralement très fortes.
Au printemps 2018, s'est déroulé un événement assez remarquable pour la fête polonaise des fans d'Atari: le livre
«Robbo. Solucja " (" Robbo. Passage ") dans le genre de la littérature expérimentale. Ici, je dois dire que le jeu
Robbo pour Atari, publié il y a 30 ans, excite encore le cœur des Polonais de l'ancienne génération et les remplit d'enthousiasme patriotique. En général, il n'est pas surprenant qu'il y ait eu un livre dédié au jeu. Le plus drôle, c'est que selon les auteurs, il s'agit de 60% des instructions de passage du jeu générées par l'ordinateur Atari lui-même. Le programme de génération est écrit sur ce même Mad Pascal.
graczpospolita.plEt il semble que
certains aient perçu le livre comme un exemple digne de l'art moderne:
Il serait faux de traiter le livre uniquement comme un objet de collection pour les fans de Robbo ou, plus généralement, pour les fans d'Atari. Nous devons faire face à un cas rare de collision de la culture des jeux vidéo avec la littérature (dans ce cas, électronique), lorsque le point de départ est «jeu» et non «littérature». Pour certains, c'est un art dénué de sens pour le bien de l'art. Pour d'autres, ce croisement apporte des opportunités et des expériences complètement nouvelles. Rien ne vous empêche de créer une version de Robbo, que vous pouvez terminer avec le «parcours» du livre. Le livre est en bon accord avec ma vision des jeux comme de l'art. Un art dans lequel le joueur peut être à la fois perceptif et créatif - si pendant le "jeu" il y a un "public" qui regarde le joueur créer sa propre histoire du "jeu". Le contenu du livre peut être adapté pour la performance avec un joueur passant Robbo en utilisant les éléments des "instructions étape par étape" du livre. Pour ne pas rester infondé: performance basée sur «Robbo. Solucja ”s'est tenue le 11 mai 2018 à la Bunker Gallery of Modern Art de Cracovie, lors de la présentation du livre dans le cadre de l'exposition inépuisable.
Performance à Cracovie. Pour cela, il valait la peine d'écrire un compilateur.