- Write Your Own Retro Compiler est un livre de 339 pages qui traite, avec l’intégralité du code source, d’un compilateur auto-hébergé fonctionnant sous CP/M sur Z80 et générant du code pour le même environnement
- La cible d’implémentation, T3X/0, est un langage simple dont les racines remontent à Pascal et BCPL, et le livre inclut un manuel complet de 20 pages
- Des connaissances en langages procéduraux comme C ou Pascal et en assembleur sont nécessaires ; des bases en assembleur Z80 et en CP/M facilitent le suivi
- L’analyse lexicale, l’analyse syntaxique, la génération de code, les optimisations simples, l’interface BDOS et la bibliothèque d’exécution sont expliquées au moyen de diagrammes, de tableaux et d’exemples
- Tout le code est fourni dans le domaine public, avec des liens pour acheter le livre papier et le PDF, consulter la table des matières et des pages d’exemple, et télécharger les sources
Périmètre et public du livre
- Write Your Own Retro Compiler est un livre publié en 2023 par Lulu Press, au format 6" x 9", de 339 pages avec 91 illustrations
- Son sujet central est un compilateur auto-hébergé qui fonctionne sous CP/M sur processeur Z80 et génère du code pour ce même environnement
- Il est conçu pour pouvoir être suivi même sans expérience préalable en création de compilateurs
- Le langage d’implémentation, T3X/0, est un langage simple dont les racines remontent à Pascal et BCPL
- Le livre comprend un manuel complet de 20 pages consacré à T3X/0
Connaissances requises
- Il faut connaître au moins un langage de programmation procédural
- C et Pascal sont donnés comme exemples
- Il faut aussi connaître au moins un langage assembleur et, idéalement, l’assembleur pour CPU Z80
- Des connaissances de base du système d’exploitation CP/M sont également requises
- Une courte introduction au langage assembleur Z80 est incluse pour les lecteurs autodidactes
Composants du compilateur
- De nombreux diagrammes, tableaux et exemples expliquent le fonctionnement interne du compilateur
- Les sujets abordés sont les suivants
- Analyse lexicale
- Analyse syntaxique
- Génération de code
- Optimisations simples
-
Interface BDOS
- Bibliothèque d’exécution
Liens fournis et code
- Tout le code du livre est dans le domaine public
- Commander le livre papier
- Commander la version PDF
- PDF de la table des matières
- PDF de pages d’exemple
- Téléchargement des sources
- Page du code
1 commentaires
Commentaires sur Hacker News
Il a publié un livre récent sur les compilateurs. C’est assez proche d’une version enrichie de « Write Your Own Compiler », mais cette fois il traite de la génération de code CP/M pour Z80 au lieu de l’ELF des systèmes modernes, ce qui simplifie énormément de choses
On peut ainsi voir quel niveau de complexité est nécessaire pour créer un compilateur capable de se compiler lui-même en moins de 10 minutes sur un système Z80 à 4 MHz. Le code est gratuit, mais le livre est payant
En plus, j’aimerais voir un livre sans fioritures sur Forth et l’interprétation qu’en ferait Nils
J’ai récemment créé en TypeScript un compilateur C multipasse et un assembleur pour ce type de vieux processeurs x86
https://github.com/Mati365/ts-c-compiler
J’ai un exemplaire physique de la 2e édition de Practical Compiler Construction et je l’aime beaucoup. Je recommande les livres de Nils à ceux que le sujet intéresse
Ce livre a l’air amusant. Cela dit, j’attends toujours une véritable suite digne de ce nom au Dragon Book
J’aimerais un livre qui traite des CPU modernes et, si possible, de l’optimisation GPU, ainsi que de la manière de concevoir et d’écrire une machine virtuelle moderne avec un ramasse-miettes concurrent rapide. D’une certaine manière, cela pourrait être encore plus difficile que d’écrire un compilateur
Il couvre la construction de graphes de flot de contrôle, diverses optimisations possibles dessus, l’analyse d’alias, la forme SSA, les optimisations basées sur les dominateurs du CFG, l’ordonnancement des instructions, l’allocation de registres et la génération de code objet. Comme la plupart des livres sur les compilateurs, il ne traite pas de l’analyse lexicale, de l’analyse syntaxique ni de sujets comme les NFA/DFA
Pour ceux qui veulent créer un compilateur optimisant nécessitant des analyses avancées, Static Program Analysis peut aussi être utile : https://cs.au.dk/~amoeller/spa/
Pour le ramasse-miettes, il existe le Garbage Collection handbook : https://gchandbook.org/
Si vous avez déjà quelques bases, ce cours pourrait vous plaire : https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
J’ai particulièrement aimé la manière dont il introduit la forme SSA
Des sujets plus avancés sont ici : https://www.cs.cmu.edu/~15745/handouts.html
Quand quelque chose me paraît « magique », je le prends comme le signe que quelqu’un a contourné avec ingéniosité ce que l’on pensait être une limite. En ce moment, je lis des choses sur les fausses basses, qui donnent l’impression que de petits haut-parleurs produisent des graves plus profonds qu’ils ne le peuvent réellement, et je trouve fascinante cette manière d’utiliser les harmoniques pour tromper le cerveau et lui faire entendre un son plus grave qu’en réalité
Ça a l’air intéressant, mais il y a l’inconvénient de devoir d’abord connaître ou apprendre T3X, un nouveau langage de programmation
Je me demande aussi s’il serait possible d’écrire et de développer un compilateur depuis zéro sur un système rétro CP/M dont les seules interfaces avec l’extérieur seraient le clavier et l’écran
SubC fait 3815 lignes et T3X/0 en fait 2330
Bien sûr, on pourrait aussi partir de zéro sur CP/M sans outils externes, mais dans ce cas il faudrait écrire le compilateur d’amorçage en assembleur. Cela demanderait beaucoup de temps, mais c’est tout à fait faisable. Je ne suis simplement pas sûr que ce serait passionnant à lire
Le fait d’utiliser une syntaxe à la ALGOL plutôt qu’une syntaxe de type C est un peu surprenant, mais c’est peut-être mon biais personnel. Faire correspondre mentalement
DOetENDà{et}n’est pas une grande chargeUn tutoriel sur les compilateurs qui va au-delà des étapes d’analyse lexicale et syntaxique, c’est peut-être presque une première
Je plaisante, mais en réalité beaucoup de ressources s’arrêtent là. Je pense l’acheter
Un livre sur l’écriture de son propre système d’exploitation à la manière de CP/M serait aussi amusant
Bien sûr, il montre comment construire un système d’exploitation micro-noyau de style Unix, mais il suffit de tout sauter sauf le chapitre sur le système de fichiers. Et si vous ignorez ses conseils sur les structures de données arborescentes, utilisez uniquement des tables plates et ne vous souciez pas de l’implémentation exacte de la taille des fichiers, vous obtenez CP/M
Personnellement, je préfère la 2e édition. À mon avis, la 3e édition est devenue inutilement complexe parce qu’elle voulait faire tourner le code de démonstration de Minix sur des PC de la fin des années 1990 plutôt que sur des PC des années 1980
Je ne dis pas ça de manière négative, c’est juste une remarque qui peut être utile
J’ai lu le chapitre gratuit, et certaines parties pourraient être difficiles pour quelqu’un qui n’a pas beaucoup de connaissances sur le sujet. Sous chaque titre, cela commence par expliquer les concepts depuis zéro, comme « qu’est-ce que la grammaire d’un langage... », mais quelques phrases plus loin apparaissent sans explication des sujets avancés comme les instructions assembleur
Si le lecteur est à un niveau où il doit encore apprendre ce que signifie une grammaire, il risque d’avoir du mal à comprendre les phrases suivantes. Un peu plus de cohérence améliorerait donc sans doute la qualité globale du livre
C’est pourquoi j’ai pensé qu’il était acceptable de supposer que le lecteur connaissait déjà des choses comme les instructions assembleur
L’annexe du livre contient aussi une courte introduction à l’assembleur Z80, mais elle suppose elle aussi que l’on connaît déjà les bases de l’assembleur
Tout livre doit bien commencer quelque part. Il est difficile d’écrire un livre sur la construction de compilateurs en supposant une absence totale de connaissances en programmation. Cela ne veut pas dire que je suis à l’abri du biais de l’expert, donc je garderai clairement ce point à l’esprit
Indépendamment du contenu du livre lui-même, j’aime aussi beaucoup le design web rétro et minimaliste parfaitement dans le ton
Cela réveille fortement la nostalgie. Cela me rappelle avec bonheur l’époque où l’on construisait soi-même son site avec, sur le bureau, un livre de 15 cm d’épaisseur intitulé quelque chose comme « HTML 3.2 UNLEASHED!!!! »
Cela dit, quand on veut appliquer un changement global à environ 1500 pages statiques, le plaisir s’arrête vite. La douleur n’est pas encore assez forte pour que je me mette à créer mon propre CMS, mais même si je le faisais, je garderais ce design
https://web.archive.org/web/20231210141834/http://t3x.org/t3...