Créer un interpréteur de langage de programmation
(craftinginterpreters.com)- Un livre qui permet d’apprendre directement la conception et l’implémentation de langages de programmation, en suivant le processus de création d’un langage de script complet
- Explication pas à pas, des concepts de haut niveau comme le parsing, la sémantique, le bytecode et le garbage collection jusqu’à l’implémentation de bas niveau
- À partir de la fonction
main(), le lecteur écrit lui-même un langage incluant le typage dynamique, la portée lexicale, les fonctions de première classe, les classes et l’héritage - Proposé en quatre formats — imprimé, eBook, PDF et web —, avec la lecture gratuite de l’intégralité du contenu sur le web
- Écrit par Robert Nystrom, développeur du langage Dart chez Google, c’est une ressource d’apprentissage pratique de premier plan pour les développeurs intéressés par la création de langages
Présentation du livre
- Crafting Interpreters est un livre consacré à la mise en œuvre directe d’un langage de script efficace et complet
- Il couvre à la fois des concepts de haut niveau comme le parsing et la sémantique, et des détails d’implémentation de bas niveau comme la représentation en bytecode et le garbage collection
- Le livre est conçu pour que le lecteur écrive lui-même le code et comprenne entièrement la structure d’un langage
- Le langage obtenu prend en charge une syntaxe riche, le typage dynamique, le garbage collection, la portée lexicale, les fonctions de première classe, les closures, les classes et l’héritage
- Il se compose de quelques milliers de lignes de code concis et rapides, entièrement écrites par le lecteur
Formats disponibles
- Le livre est proposé en quatre formats : Print, eBook, PDF et Web
- Print : 640 pages, avec des illustrations dessinées à la main en haute résolution et une typographie soignée
- eBook : le CSS s’adapte à la taille de l’écran de l’appareil, avec coloration syntaxique et hyperliens
- PDF : reprend fidèlement la mise en page et les illustrations de l’édition imprimée tout en offrant une meilleure portabilité
- Web : design responsive incluant tous les chapitres et illustrations, avec accès gratuit à l’intégralité du contenu
À propos de l’auteur
- L’auteur, Robert Nystrom, participe au développement du langage Dart chez Google
- Il a auparavant travaillé pendant 8 ans dans le développement de jeux chez Electronic Arts
- Il est aussi l’auteur du best-seller Game Programming Patterns, également disponible gratuitement
- Passionné par la création de langages, il a développé plusieurs projets de langages personnels (Wren, Magpie, Finch, Vigil)
- Il est actif via son blog personnel et Twitter (
@munificentbob), et anime une mailing list liée à son livre
Accès et achat
- L’édition imprimée peut être achetée dans de grandes librairies comme Amazon, Barnes & Noble et Book Depository
- L’eBook est disponible sur Kindle, Apple Books, Google Play Books et Smashwords
- La version PDF peut être achetée sur Payhip, avec téléchargement d’un extrait PDF gratuit
- La version web est consultable gratuitement dans son intégralité sur le site officiel
1 commentaires
Avis Hacker News
Grâce à cela, j’ai aussi pleinement saisi le concept de Class Hierarchy Inheritance, qui n’a pas besoin de visitor
Dans le langage Newspeak, on peut placer des classes imbriquées à l’intérieur d’une classe, et lors de l’héritage, ces classes imbriquées sont elles aussi héritées
Cet article de blog traite du fait que cette fonctionnalité rend possibles les Free Object Algebras : ce billet
Références : article sur l’Expression Problem, site officiel de Newspeak
En 2020, il a atteint 777 points, et en 2024 607 points
On apprend en implémentant soi-même différentes fonctionnalités et patterns de langage
Dans les langages qui ont des fonctionnalités absentes de Java, il est difficile d’appliquer des patterns similaires, mais le défi en lui-même était amusant
J’ai beaucoup aimé le style décontracté de l’auteur et l’humour disséminé un peu partout
J’aimerais voir une suite du genre « ajouter un vérificateur de types à Lox »
Au début, j’ai acheté la version papier, mais elle était trop grande et trop lourde, donc j’ai fini par racheter la version numérique
C’est bien plus pratique pour prendre des notes et faire des recherches
Cela dit, en le lisant, on a parfois l’impression de se perdre dans la montagne :)
Je recommande aussi un autre livre de l’auteur, Game Programming Patterns
Un imprimeur peut le faire facilement, et c’est bien plus pratique à utiliser sur un bureau
Mais Crafting Interpreters est un livre que je ne pourrai jamais jeter, donc je l’ai laissé tel quel
C’est dire à quel point ce livre est excellent
Et le fait que la version web soit gratuite est vraiment généreux
Je regrette simplement que la version Java soit ancienne
J’aimerais une édition révisée prenant en compte des fonctionnalités récentes comme les sealed classes ou le exhaustive switch
Cela évite d’avoir besoin de l’outil temporaire de génération de code créé par l’auteur
Il existe des approches un peu bricolées consistant à ajouter une pile de contexte dans un parseur basé sur PEG, mais les problèmes de bascule syntaxique restent difficiles
Les persistent data structures ou les transactional data structures pourraient peut-être aider, mais je n’ai pas encore trouvé de formalisation claire
L’idée est de faire passer un état du parseur au lexer, afin que le lexer connaisse l’ensemble des noms de types
Par exemple, dans des bibliothèques comme Parsec, la notation
dopermet aux parseurs suivants de partager le résultat de chaque étapeHeureusement, Rust et Go ont évité cela, et une conception soigneuse permet tout à fait de s’en prémunir
Vous pouvez consulter le projet shi et, si le C vous intéresse davantage, hacktical-c