2 puntos por GN⁺ 5 시간 전 | 1 comentarios | Compartir por WhatsApp
  • Un libro gratuito en línea desarrollado para el curso de compiladores CSE 40243 de Notre Dame, con PDF completo y PDFs por capítulo disponibles para descarga inmediata
  • Sigue el flujo de construcción de un compilador a lo largo de un semestre y aborda el proceso de traducir programas de lenguajes de alto nivel a programas de bajo nivel
  • El objetivo para el estudiante es implementar un compilador simple que reciba un lenguaje similar a C y lo convierta a ensamblador X86 o ARM
  • Está mejor orientado a estudiantes de licenciatura con experiencia en programación en C y conocimientos de estructuras de datos y arquitectura de computadoras
  • Los PDF pueden usarse con fines personales y académicos, pero se prohíbe su impresión y distribución comercial, y el material más reciente debe consultarse en compilerbook.org

Libro basado en el curso de compiladores de Notre Dame

  • Introduction to Compilers and Language Design es un libro gratuito en línea desarrollado por Douglas Thain para el curso de compiladores CSE 40243 de University of Notre Dame
  • La segunda edición corresponde a 2020 y aparece con fecha de revisión 15 de enero de 2021
  • Quienes quieran una copia física pueden comprarla en tapa dura o en rústica
  • El libro aborda tanto los aspectos teóricos como prácticos de la informática mediante el proceso de construir un compilador desde cero
  • La meta final de aprendizaje es implementar un compilador sencillo que tome como entrada un lenguaje similar a C y lo traduzca a ensamblador X86 o ARM

PDF, código de ejemplo y condiciones de uso

1 comentarios

 
GN⁺ 5 시간 전
Opiniones en Hacker News
  • Tomé la clase de compiladores del Dr. Thain en la universidad y fue excelente
    Era un gran profesor, y gracias al proyecto de la clase pude construir paso a paso un compilador estilo C por mi cuenta. El proyecto de ejemplo de aquí se ve casi igual al que hicimos en ese entonces, y recomiendo mucho seguirlo hasta el final

  • Todavía no sé en qué curso se habrá tratado, pero C4(https://news.ycombinator.com/item?id=8558822) y C4x86(https://news.ycombinator.com/item?id=8746054) parecen buenos temas de estudio para un semestre
    Como son compiladores muy pequeños de un subconjunto de C que se compilan a sí mismos, también parecen adecuados como base para tareas adicionales donde se amplíen sus funcionalidades

  • Artículos relacionados: Introduction to Compilers and Language Design (2021) - https://news.ycombinator.com/item?id=31388741 - mayo de 2022, 68 comentarios
    Introduction to Compilers and Language Design - https://news.ycombinator.com/item?id=19728749 - abril de 2019, 1 comentario

  • Da la impresión de moverse solo dentro de un alcance estrecho alrededor de C y sus convenciones peculiares

    • Probablemente sea una estructura intencional
      La descripción del libro también dice que es “un texto introductorio de un semestre que permite al lector crear un compilador sencillo que acepte un lenguaje similar a C
  • Según el prólogo, ¿el Dragon Book es de nivel avanzado de posgrado?

    • El Dragon Book es un poco peculiar
      Es un clásico, pero apenas cubre hasta cierto punto los fundamentos de la teoría de la computación, y el resto del contenido sobre compiladores más bien lo recorre rápido
      No trata en serio los temas modernos de compiladores de nivel de posgrado, y tampoco es un libro práctico. El Tiger Book es una introducción mucho mejor en cuanto al equilibrio entre práctica y teoría
      Creo que los temas realmente avanzados de compiladores difícilmente puedan cubrirse bien con un solo libro
    • Con solo ver el prólogo de la edición de 2006, parece que los autores consideran este libro, en general, como un texto de nivel de posgrado
      Dice: “Para cubrir todo este libro, o la mayor parte, se requieren al menos dos trimestres o dos semestres. Normalmente la primera mitad se cubre en cursos de pregrado, y la segunda mitad, que enfatiza la optimización de código, en un segundo curso de nivel de posgrado o intermedio”
  • A veces me impresiona mucho la gente que diseña lenguajes y construye compiladores
    Por curiosidad intenté crear mi propio lenguaje, pero era demasiado difícil, así que terminé conformándome con un backend en C sencillo. Quienes contribuyen a LLVM parecen saberlo todo, incluso la generación de assembly, y eso me resulta realmente asombroso

    • No necesariamente
      Yo era desarrollador web y pasé a trabajar en compiladores basados en LLVM; LLVM en sí es enorme, así que no es fácil aprender todas sus áreas y mecanismos
      Pero para escribir passes no complejos, corregir bugs y arreglar regresiones no se necesita un conocimiento extraordinariamente especial
    • La generación de assembly en sí es, de hecho, bastante simple; lo difícil es optimizarlo todo
      Escribir un assembler es una buena forma de familiarizarse con la estructura de un compilador, porque no hay que preocuparse por optimizaciones, tipos ni muchas funcionalidades que vuelven complejos a los lenguajes de alto nivel
    • Cuando aprendo un lenguaje nuevo, lo que más me gusta es crear rápidamente un lexer/parser y un REPL
      Con solo implementar el frontend de la gramática de un lenguaje propio y un pequeño bucle de evaluación, puedes explorar muchas partes de un lenguaje real. Como no te atasca la resolución de problemas reales, también es bueno para aprender y enseñar
      Así que no hay absolutamente ninguna razón para avergonzarte por haberte conformado con un backend en C sencillo
  • Con solo hojear el índice, casi no se ven los temas principales de diseño de lenguajes
    Más que el título, parece simplemente una “introducción a compiladores”

    • Parece una estructura para seguir, a nivel de pregrado, los temas centrales de cómo funcionan los lenguajes
      Es un nivel adecuado para entender cosas como Python o Ruby, o un compilador más simple de Pascal
      Los compiladores y el diseño de lenguajes son campos tan antiguos como esta industria, así que hay demasiado conocimiento para meterlo en una sola materia. Aun así, este curso está bien, y creo que es mejor que cursos similares basados en el Dragon Book
    • ¿Qué libro recomiendan para aprender diseño de lenguajes de programación? Me da curiosidad saber cuáles son los temas que faltan
  • Entre tantos temas de IA y ruido, da gusto ver un artículo sobre compiladores como este

    • Lo curioso del odio ciego hacia la IA es que, aunque alguien llame basura de IA a cualquier texto sin pruebas, el bando anti-IA lo rechaza sin fundamentos
      El uso correcto y de alta calidad de la IA también tiene valor, y el trabajo que no usa IA también lo tiene. Sería bueno tener criterios válidos para los resultados relacionados con IA, en lugar de descalificar sin más el trabajo de la gente
  • Buen artículo
    Me impresiona cómo, con excelentes ejemplos, vuelve a pulir y aclarar conocimientos que había aprendido antes