3 points par GN⁺ 2023-12-11 | 1 commentaires | Partager sur WhatsApp
  • 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

1 commentaires

 
GN⁺ 2023-12-11
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

    • J’attends toujours avec intérêt ce que Nils est en train de créer. J’espère qu’il arrive aussi à en faire une activité rentable, et j’aimerais un jour tout acheter pour suivre ses explications
      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

    • Le compilateur du livre cible un Z80 encore plus ancien, qui n’a même pas d’instructions de multiplication ou de division. Malgré cela, ce compilateur peut aussi produire du code pour 8086 et 386
  • 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

    • Building an Optimizing Compiler de Bob Morgan est un livre entièrement consacré à l’optimisation des compilateurs modernes, publié en 1997
      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/
    • Je me souviens ne pas avoir beaucoup aimé le Dragon Book quand j’étais étudiant. Je ne me rappelle plus très bien pourquoi, mais j’avais probablement l’impression qu’il était mal structuré, avec certains sujets traités de manière excessivement détaillée alors que d’autres manquaient d’explications
      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
    • Moi aussi, j’attends un livre comme celui-là. De nos jours, c’est devenu trop complexe à cause d’éléments comme les microcodes/firmwares modernes, et beaucoup de choses donnent l’impression de relever de la magie
      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

    • J’y ai beaucoup réfléchi avant d’écrire le livre. J’ai finalement choisi T3X parce que ce compilateur est bien plus petit que le plus petit compilateur pour un sous-ensemble de C, et qu’à mes yeux T3X est aussi plus facile à apprendre et à comprendre
      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
    • Je n’y vois pas un inconvénient. Pour quelqu’un qui veut écrire un compilateur, un nouveau langage de programmation ne sera probablement pas un gros obstacle, et un langage jouet simple et propre peut même être préférable à des fins pédagogiques
      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 DO et END à { et } n’est pas une grande charge
  • Un 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

    • Ce serait Operating Systems Design and Implementation d’Andrew Tanenbaum
      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

    • Comme je l’ai écrit dans la présentation du livre, aucune connaissance préalable de la construction de compilateurs n’est nécessaire, mais j’ai estimé que le lecteur devait au minimum être familier avec un langage procédural et un langage assembleur
      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!!!! »

    • C’était le bon temps
      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...