- L’auteur a relevé le défi difficile d’écrire un compilateur C en 500 lignes de code Python
- Le compilateur fonctionne en un seul passage et, contrairement aux compilateurs classiques en deux passes qui construisent d’abord un arbre syntaxique avant de le transformer en code machine, il génère le code pendant l’analyse
- Le compilateur cible WebAssembly, un choix motivé davantage par la curiosité que par l’aspect pratique. Les défis particuliers de WebAssembly, comme l’absence de registres et l’utilisation d’une machine à pile, sont mis en avant
- En raison de la contrainte des 500 lignes, le compilateur ne prend pas en charge certaines fonctionnalités du C, comme les structures, énumérations, unions, directives du préprocesseur, nombres à virgule flottante et types sur 8 octets
- Le compilateur réussit 34 des 220 cas de test de
c-testsuite et peut compiler puis exécuter avec succès un programme qui calcule la suite de Fibonacci
- L’article propose une analyse détaillée du code du compilateur et explique comment il gère divers aspects de la syntaxe C, ainsi que les difficultés liées au travail avec WebAssembly
- Malgré la complexité d’un compilateur, cela montre qu’en sacrifiant la qualité du code et en faisant tout en un seul passage, on peut obtenir quelque chose d’étonnamment concis
- Il est suggéré que ce type de compilateur en un seul passage pourrait faire un excellent stage0 pour un langage auto-hébergé grâce à sa concision
- Le nombre de lignes de code a été mesuré avec l’outil
sloccount, en excluant les commentaires, docstrings et lignes vides
1 commentaires
Avis Hacker News
structde Ritchie et le compilateur C de Unix v7