Desarrolla tu propio compilador retro
(t3x.org)- Write Your Own Retro Compiler es un libro de 339 páginas que cubre, junto con todo el código fuente, un compilador autoalojado que corre en CP/M basado en Z80 y genera código para ese mismo entorno
- T3X/0, el objetivo de la implementación, es un lenguaje simple con raíces en Pascal y BCPL, y el libro incluye un manual completo de 20 páginas
- Se requiere conocimiento de lenguajes procedurales como C o Pascal y de lenguaje ensamblador; con nociones básicas de ensamblador Z80 y de CP/M es más fácil seguirlo
- Explica con diagramas, tablas y ejemplos el análisis léxico, el análisis sintáctico, la generación de código, la optimización simple, la interfaz BDOS y la biblioteca de tiempo de ejecución
- Todo el código se ofrece en dominio público, y también se publican enlaces para comprar el libro en papel y el PDF, además del índice, páginas de muestra y descarga del código fuente
Alcance y público del libro
- Write Your Own Retro Compiler es un libro de 339 páginas, con 91 figuras y formato de 6" x 9", publicado por Lulu Press en 2023
- El tema central es un compilador autoalojado que se ejecuta en CP/M para el procesador Z80 y genera código para ese mismo entorno
- Está estructurado para que se pueda seguir incluso sin experiencia previa creando compiladores
- T3X/0, el lenguaje de implementación, es un lenguaje simple con raíces en Pascal y BCPL
- El libro incluye un manual completo de 20 páginas sobre T3X/0
Conocimientos necesarios
- Es necesario conocer al menos un lenguaje de programación procedural
- Se mencionan como ejemplos C y Pascal
- También hay que conocer al menos un lenguaje ensamblador y, de forma ideal, tener conocimientos de ensamblador para CPU Z80
- También se requiere conocimiento básico del sistema operativo CP/M
- Para lectores autodidactas, se incluye una breve introducción al lenguaje ensamblador Z80
Componentes del compilador
- Explica el funcionamiento interno del compilador con muchos diagramas, tablas y ejemplos
- Los temas tratados son los siguientes
- análisis léxico
- análisis sintáctico
- generación de código
- optimización simple
-
Interfaz BDOS
- biblioteca de tiempo de ejecución
Enlaces y código disponible
- Todo el código del libro está en dominio público
- Pedir libro impreso
- Pedir copia en PDF
- PDF del índice
- PDF de páginas de muestra
- Descargar código fuente
- Página del código
1 comentarios
Opiniones de Hacker News
Acabo de publicar un libro nuevo sobre compiladores. Es más bien una versión ampliada de “Write Your Own Compiler”, y esta vez trata sobre generación de código CP/M para Z80 en lugar de ELF para sistemas modernos, así que muchas partes se vuelven mucho más simples.
Permite ver qué nivel de complejidad se necesita para crear un compilador que se compile a sí mismo en menos de 10 minutos en un sistema Z80 de 4 MHz. El código es gratuito, pero el libro es de pago.
Además, me gustaría ver un libro sin relleno sobre Forth y una interpretación al estilo Nils.
Hace poco hice en TypeScript un compilador C multipasada y un ensamblador para estos CPU x86 antiguos.
https://github.com/Mati365/ts-c-compiler
Tengo el libro físico de la 2.ª edición de Practical Compiler Construction y me gusta bastante. Recomiendo los libros de Nils a quienes les interese el tema.
Este libro se ve interesante. Pero sigo esperando un verdadero sucesor de The Dragon Book.
Me gustaría un libro que cubra CPU modernas y, si es posible, optimización para GPU, y también cómo diseñar y escribir una máquina virtual moderna con un recolector de basura concurrente y rápido. En algunos aspectos, eso podría ser incluso más difícil que escribir un compilador.
Cubre la construcción de grafos de flujo de control, varias optimizaciones posibles sobre ellos, análisis de alias, forma SSA, optimizaciones basadas en dominadores de CFG, planificación de instrucciones, asignación de registros y generación de código objeto. A diferencia de la mayoría de los libros de compiladores, no trata temas como análisis léxico, análisis sintáctico o NFA/DFA.
Para alguien que quiera crear un compilador optimizador que requiera análisis avanzados, Static Program Analysis también podría ayudar: https://cs.au.dk/~amoeller/spa/
Para recolección de basura está el Garbage Collection handbook: https://gchandbook.org/
Si ya tienes ciertos conocimientos básicos, puede que te guste este curso: https://www.cs.cmu.edu/~janh/courses/411/18/schedule.html
Me gustó especialmente la forma en que introduce la forma SSA.
Hay temas más avanzados aquí: https://www.cs.cmu.edu/~15745/handouts.html
Cuando algo se siente como “magia”, lo tomo como una señal de que alguien encontró una forma ingeniosa de rodear algo que se consideraba un límite. Últimamente estuve leyendo sobre el bajo falso, que hace que un parlante pequeño parezca producir graves más profundos de lo que realmente puede; es interesante cómo usa armónicos para engañar al cerebro y hacerle oír una nota más baja de la real.
Se ve interesante, pero tiene la desventaja de que el lector primero tiene que conocer o aprender un nuevo lenguaje de programación, T3X.
También me pregunto si sería posible escribir y desarrollar un compilador desde cero en un sistema CP/M retro cuya única conexión con el exterior son el teclado y la pantalla.
SubC tiene 3815 líneas y T3X/0 tiene 2330.
Por supuesto, también se podría empezar en CP/M sin herramientas externas, pero entonces habría que escribir el compilador de bootstrap en lenguaje ensamblador. Llevaría mucho tiempo, pero es totalmente posible. Eso sí, dudo que resulte una lectura interesante.
Que use una sintaxis estilo ALGOL en lugar de una estilo C me sorprende un poco, pero quizá sea mi sesgo. Hacer corresponder mentalmente
DOyENDcon{y}no es una gran carga.¿Un tutorial de compiladores que va más allá de las etapas de análisis léxico y análisis sintáctico? Casi parece el primero.
Es broma, pero en la práctica muchos materiales se detienen ahí. Creo que voy a comprarlo.
Sería divertido que hubiera también un libro sobre cómo escribir tu propio sistema operativo tipo CP/M.
Claro, muestra cómo crear un sistema operativo con microkernel al estilo Unix, pero basta con saltarse todo excepto el capítulo del sistema de archivos. Y no sigas los consejos sobre estructuras de datos en árbol: usa solo tablas planas y no te preocupes por implementar tamaños de archivo exactos. Entonces tendrás CP/M.
Personalmente prefiero la 2.ª edición. Creo que la 3.ª se volvió innecesariamente compleja porque el código de demostración de Minix tenía que correr en PC de fines de los 90, no en PC de los 80.
No lo digo en sentido negativo; es una observación que puede ayudar.
Leí los capítulos gratuitos y me pareció que algunas partes podrían ser difíciles para alguien que no tenga mucho conocimiento del tema. Debajo de cada título se explican conceptos desde cero, como “la gramática de un lenguaje es...”, pero apenas unas frases después aparecen temas avanzados como instrucciones de ensamblador sin explicación.
Si el lector está en un nivel en el que necesita aprender qué significa la gramática, podría resultarle difícil entender las oraciones inmediatamente posteriores. Por eso creo que aumentar un poco la consistencia mejoraría la calidad del libro.
Por eso pensé que estaba bien asumir que el lector ya conocía cosas como instrucciones de ensamblador.
En el apéndice del libro también hay una breve introducción al ensamblador Z80, pero esta también asume que se conocen los fundamentos del lenguaje ensamblador.
Todo libro tiene que empezar en algún punto. Es difícil escribir un libro sobre construcción de compiladores asumiendo que no se tiene ningún conocimiento de programación de computadoras. Aun así, eso no significa que no exista la maldición del conocimiento, así que sin duda tendré este punto en cuenta.
Más allá del contenido real del libro, también me gusta el diseño web retro y minimalista: le queda perfecto.
Despierta mucha nostalgia. Me trae buenos recuerdos de tener en el escritorio un libro de 6 pulgadas de grosor con un título como “HTML 3.2 UNLEASHED!!!!” y crear sitios web a mano.
Pero la diversión se acaba cuando intentas aplicar un cambio global a unas 1500 páginas estáticas. El dolor aún no es tan grande como para crear mi propio CMS, pero aunque lo hiciera, mantendría el diseño tal cual.
https://web.archive.org/web/20231210141834/http://t3x.org/t3...