10 puntos por GN⁺ 2023-09-05 | 1 comentarios | Compartir por WhatsApp
  • El autor asumió el difícil reto de escribir un compilador de C en 500 líneas de código Python
  • El compilador es de una sola pasada y, a diferencia de los compiladores habituales de dos pasadas que primero construyen un árbol sintáctico y luego lo transforman en código máquina, genera código durante el análisis sintáctico
  • El compilador apunta a WebAssembly, una decisión tomada más por curiosidad que por practicidad. Se destacan los desafíos particulares de WebAssembly, como la ausencia de registros y el uso de una máquina de pila
  • Debido a la restricción de 500 líneas, el compilador no soporta ciertas funciones de C, como struct, enum, union, directivas del preprocesador, punto flotante y tipos de 8 bytes
  • El compilador pasa 34 de los 220 casos de prueba de c-testsuite, y puede compilar y ejecutar con éxito un programa que calcula la secuencia de Fibonacci
  • Ofrece un análisis detallado del código del compilador y explica cómo maneja varios aspectos de la sintaxis de C, así como las dificultades de trabajar con WebAssembly
  • A pesar de la complejidad de un compilador, demuestra que, si se sacrifica la calidad del código y se hace todo en una sola pasada, puede resultar sorprendentemente conciso
  • Sugiere que este tipo de compilador de una sola pasada podría ser excelente como stage0 para un lenguaje self-hosting gracias a su concisión
  • La cantidad de líneas de código se midió con la herramienta sloccount, excluyendo comentarios, docstrings y espacios en blanco

1 comentarios

 
GN⁺ 2023-09-05
Opiniones en Hacker News
  • Artículo sobre crear un compilador de C usando 500 líneas de Python, comparado con el compilador Tiny Pascal publicado en 1978
  • El compilador es de una sola pasada, con generación de código durante el análisis sintáctico, una característica diseñada específicamente para C para adaptarse a la memoria limitada de las primeras computadoras
  • La ventaja de escribir tu propio compilador es que ayuda a entender compiladores, intérpretes, enlazadores/cargadores y el software de sistema relacionado, además de facilitar los esfuerzos de depuración y mejorar el nivel técnico del desarrollador
  • Este proyecto es similar a otros, como un proyecto en TypeScript que genera ensamblador x86, lo compila a binario y lo ejecuta
  • El artículo recibe elogios por la claridad de sus explicaciones, y esto se considera un reto divertido dentro del mundo de los lenguajes de programación extraños (esolangs)
  • La tarea de escribir un compilador de C en 500 líneas de código fáciles de entender se considera un reto importante que requeriría meses de trabajo incluso para desarrolladores con experiencia
  • El artículo despierta curiosidad por otros compiladores pequeños, como un compilador de Scheme a WASM
  • Como comparación, el artículo menciona la cantidad de líneas de código (LOCs) de otros compiladores pequeños de C o similares a C, incluido el compilador de struct más antiguo de Ritchie y el compilador de C de v7 Unix