2 puntos por GN⁺ 2026-01-17 | 1 comentarios | Compartir por WhatsApp
  • Un libro para aprender directamente diseño e implementación de lenguajes de programación, recorriendo el proceso de crear un lenguaje de scripting completo
  • Explica paso a paso desde conceptos de alto nivel como parsing, semántica, bytecode y recolección de basura hasta la implementación de bajo nivel
  • Empieza desde la función main() y guía al lector para escribir un lenguaje con tipado dinámico, alcance léxico, funciones de primera clase, clases y herencia
  • Está disponible en 4 formatos: impreso, eBook, PDF y versión web; en la web se puede leer el contenido completo gratis
  • Escrito por Robert Nystrom, desarrollador del lenguaje Dart en Google, y es un recurso práctico importante para desarrolladores interesados en crear lenguajes

Descripción general del libro

  • Crafting Interpreters es un libro sobre cómo implementar directamente un lenguaje de scripting eficiente y con funcionalidades completas
    • Incluye tanto conceptos de alto nivel como parsing y semántica, como detalles de implementación de bajo nivel como representaciones en bytecode y recolección de basura
    • Está estructurado para que el lector escriba el código por sí mismo y entienda completamente la estructura del lenguaje
  • El lenguaje que se construye al final soporta gramática rica, tipado dinámico, recolección de basura, alcance léxico, funciones de primera clase, closures, clases y herencia
    • Está compuesto por miles de líneas de código conciso y rápido, y todo el código lo escribe directamente el lector

Formatos disponibles

  • El libro se ofrece en cuatro formatos: Print, eBook, PDF y Web
    • Print: 640 páginas, con ilustraciones dibujadas a mano en alta resolución y tipografía cuidada
    • eBook: el CSS se ajusta al tamaño de pantalla del dispositivo y ofrece resaltado de sintaxis en color e hipervínculos
    • PDF: reproduce la maquetación y las ilustraciones de la edición impresa, con mayor portabilidad
    • Web: incluye todos los capítulos e ilustraciones con diseño responsivo, y se puede leer completo gratis

Sobre el autor

  • El autor, Robert Nystrom, participa en el desarrollo del lenguaje Dart en Google
    • Anteriormente trabajó 8 años en desarrollo de videojuegos en Electronic Arts
    • Es autor del bestseller Game Programming Patterns, que también está disponible gratis
  • Fascinado por la creación de lenguajes, desarrolló varios proyectos personales de lenguajes (Wren, Magpie, Finch, Vigil)
  • También mantiene actividad a través de su blog personal y Twitter(@munificentbob), y administra una lista de correo relacionada con sus libros

Acceso y opciones de compra

  • La edición impresa se puede comprar en librerías importantes como Amazon, Barnes & Noble y Book Depository
  • El eBook está disponible en Kindle, Apple Books, Google Play Books y Smashwords
  • La versión PDF se puede comprar en Payhip, y también ofrece descarga de un PDF de muestra gratuito
  • La versión web se puede leer completa gratis en el sitio oficial

1 comentarios

 
GN⁺ 2026-01-17
Comentarios en Hacker News
  • Al leer este libro entendí mucho mejor el expression problem y el patrón visitor como una de sus soluciones
    Gracias a eso también terminé de comprender el concepto de herencia en jerarquías de clases (Class Hierarchy Inheritance), que no requiere visitor
    En el lenguaje Newspeak se pueden tener clases anidadas dentro de una clase, por lo que al heredar también se heredan esas clases anidadas
    Esta función es la que hace posibles las Free Object Algebras, como se explica en esta entrada del blog
    Referencia: artículo sobre Expression Problem, sitio oficial de Newspeak
  • Hubo dos discusiones muy populares sobre este excelente libro
    En 2020 obtuvo 777 puntos y en 2024 registró 607 puntos
  • Este libro fue un recurso realmente bueno para aprender un lenguaje nuevo
    porque te hace aprender implementando por tu cuenta distintas funciones y patrones del lenguaje
    En lenguajes que tienen funciones que Java no tiene, es difícil aplicar patrones similares, pero ese desafío en sí mismo era divertido
  • Terminé de leer este libro completo durante las vacaciones de invierno
    Me gustó muchísimo el estilo casual del autor y el humor que aparece por todas partes
    Ojalá salga una continuación como “Agregar un type checker a Lox”
  • De verdad es un gran libro
    Al principio compré la edición en papel, pero era tan grande y pesada que al final también compré el ebook
    Es mucho más cómodo para tomar notas y buscar cosas
    Aun así, a veces al leerlo se siente como perderse en la montaña :)
    También recomiendo Game Programming Patterns, otro libro del autor
    • Yo incluso cambié la encuadernación a anillado para usarlo
      En una imprenta te lo hacen fácilmente y es mucho más cómodo de manejar sobre el escritorio
      Pero Crafting Interpreters es un libro que jamás podría tirar, así que lo dejé tal cual
  • He comprado la edición impresa para regalo tres veces
    Así de bueno es este libro
    • Gracias por comprar una copia de regalo :)
  • Es uno de los mejores recursos para aprender diseño de compiladores
    Además, es realmente generoso que la versión web sea gratuita
    • Aunque la palabra ‘compiler’ no aparece de forma explícita en el título del libro
  • Me encanta este libro
    Pero sí me da pena que la versión en Java esté desactualizada
    Me gustaría que hubiera una edición revisada que reflejara funciones añadidas recientemente como sealed classes o exhaustive switch
    • También es un buen ejercicio práctico actualizarlo uno mismo a una versión moderna de Java
      Si haces eso, ya no hace falta la herramienta temporal de generación de código que creó el autor
  • Me daba curiosidad cómo se analiza sintácticamente una gramática dependiente del contexto como los typedef de C++
    Existe un enfoque medio hacky de agregar un context stack en un parser basado en PEG, pero el problema de cambiar de gramática sigue siendo difícil
    Creo que las persistent data structures o transactional data structures podrían ayudar, pero todavía no he encontrado una formalización clara
    • Basta con revisar el Lexer hack
      La idea es hacer que el parser le pase estado al lexer, de modo que el lexer conozca el conjunto de nombres de tipos
    • Otra forma es usar un functional parser
      Por ejemplo, en bibliotecas como Parsec, si aprovechas la notación do, los parsers siguientes pueden compartir los resultados de cada etapa
    • El diseño gramatical de C/C++ es de lo peor, y por eso pasan estos problemas
      Por suerte Rust y Go evitaron este tipo de complicaciones, y con un diseño cuidadoso se pueden prevenir perfectamente
  • Comparto algunos recursos para quienes quieran empezar con intérpretes
    Vale la pena revisar el proyecto shi y, si te interesa más el lado de C, hacktical-c