10 points par GN⁺ 2023-09-05 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2023-09-05
Avis Hacker News
  • Article sur la création d’un compilateur C en 500 lignes de Python, comparé au compilateur Tiny Pascal publié en 1978
  • Le compilateur fonctionne en single-pass, avec une génération de code effectuée pendant l’analyse syntaxique, une caractéristique spécialement conçue pour le C afin de s’adapter à la mémoire limitée des premiers ordinateurs
  • Écrire son propre compilateur permet de mieux comprendre les compilateurs, les interpréteurs, les linkers/loaders et les logiciels système associés, aide les efforts de débogage et améliore le niveau technique du développeur
  • Ce projet est similaire à d’autres, comme un projet TypeScript qui génère de l’assembleur x86, le compile en binaire, puis l’exécute
  • L’article est salué pour la clarté de ses explications, et cela est considéré comme un défi amusant dans l’univers des langages de programmation ésotériques (esolangs)
  • Écrire un compilateur C en 500 lignes de code compréhensibles est considéré comme un défi majeur, qui demanderait plusieurs mois de travail même à des développeurs expérimentés
  • L’article suscite aussi la curiosité pour d’autres petits compilateurs, comme un compilateur Scheme vers WASM
  • À titre de comparaison, l’article mentionne le nombre de lignes de code (LOCs) d’autres petits compilateurs C ou similaires au C, notamment le tout premier compilateur de struct de Ritchie et le compilateur C de Unix v7