3 puntos por GN⁺ 2024-03-04 | 1 comentarios | Compartir por WhatsApp
  • CS 6120, un curso de nivel doctoral de Cornell CS, se ofrece como un currículo autodirigido en línea que reúne videos de clases, apuntes, lectura de papers y tareas de implementación
  • Cubre desde temas centrales de compiladores como representación intermedia, flujo de datos y optimización clásica, hasta paralelización, compilación JIT y recolección de basura
  • Las prácticas usan LLVM y el IR educativo Bril, y continúan con tareas de hacking open source para implementar directamente conceptos abstractos
  • La versión autodirigida permite ignorar las fechas límite, pero no participar en las discusiones de Zulip ni en el proyecto final del curso real
  • Los materiales están publicados como open source en GitHub, por lo que se pueden reportar problemas, y al terminar se puede completar un formulario de retroalimentación

Cómo se toma el curso y qué cubre

  • CS 6120 es un curso sobre implementación de lenguajes de programación creado por Adrian Sampson de Cornell CS
  • El alcance del curso incluye tanto bases comunes de la implementación de compiladores como temas orientados a investigación
    • representación intermedia
    • flujo de datos
    • optimización “clásica”
    • paralelización
    • compilación JIT
    • recolección de basura
  • El aprendizaje se desarrolla mediante lectura de papers y tareas de hacking open source
    • En las prácticas se usan LLVM y Bril, un IR educativo para la materia
  • El currículo autodirigido está organizado como una materia sin calificación de 4 créditos en una “universidad imaginaria”
    • Las clases están ordenadas de forma lineal
    • Cada lección incluye video y notas escritas
    • Algunas lecciones incluyen tareas de implementación
    • Hay un orden recomendado que mezcla ver videos y leer papers

En qué se diferencia de la clase real

  • Quienes lo tomen de forma autodirigida pueden ignorar las fechas límite de las tareas
  • No pueden participar en las discusiones de Zulip del curso real
  • El CS 6120 real incluye un proyecto final semestral
    • En la versión autodirigida, la tarea final del semestre es “cambiar el mundo con la magia de los compiladores”
  • La calidad de producción de las clases puede ser baja, especialmente en las primeras lecciones
  • Los materiales de CS 6120 están publicados como open source en GitHub, y si encuentras un problema puedes reportar un bug
  • Al terminar, puedes completar este formulario de retroalimentación

Lecciones y materiales de lectura

1 comentarios

 
GN⁺ 2024-03-04
Comentarios de Hacker News
  • Al terminar la licenciatura y buscar mi primer empleo de tiempo completo, este curso me ayudó a pasar las entrevistas para equipos de ingeniería de compiladores en MANGA (Meta, Apple, NVIDIA, Google, Amazon)
    El plan de estudios de sistemas de computación de bajo nivel de la University of Waterloo también era excelente y yo también contribuía a proyectos de compiladores de código abierto, pero este curso me ayudó muchísimo a responder las preguntas más difíciles de las entrevistas

    • No es “par excellent”, sino par excellence, y la estructura de esa frase también suena rara
      Para que sonara más natural, algo como “my university has the low level computing systems curriculum par excellence” habría estado mejor
  • Antes de escribir un compilador, creo que primero hay que entender arquitectura de computadoras y saber qué debe generar un compilador para producir el código máquina más eficiente
    Pero, por experiencia, las escuelas y universidades parecen estar relegando cada vez más la arquitectura de computadoras, e incluso la programación de sistemas, quizá porque la consideran demasiado técnica
    Aun así, ese conocimiento es muy importante para conseguir buenos empleos en la industria

    • Es cierto que las universidades están bajando la prioridad de la programación de sistemas, pero la razón no es que sea “demasiado técnica”
      El problema de fondo que he visto al trabajar con universidades es que hay demasiado contenido potencial para cubrir en un tiempo limitado de clase
      La cantidad de información que hay que conocer en nuestro campo crece de forma exponencial con el tiempo y ya superó el límite, así que que se reduzca el tiempo dedicado a programación de sistemas en el trayecto general es razonable, porque cada año es menos relevante para más estudiantes
    • ¿Podrías explicar más qué consideras buenos empleos en la industria y por qué lo ves así?
    • Creo que uno de los grandes avances de la industria ha sido poder usar compiladores sin ese nivel de detalles de bajo nivel
      Todavía hay mucho por hacer a nivel de compilador, pero una buena parte de eso no debería requerir preocuparse hasta el nivel de la microarquitectura de la computadora
    • El trabajo relacionado con GPU todavía exige muchas capacidades de arquitectura de computadoras y compiladores
      Aunque no haga falta estudiar x86 o MIPS, CUDA muestra una arquitectura todavía más extraña que esas
    • Por experiencia, no parece que nadie considere los detalles de bajo nivel “demasiado técnicos”
      La razón habitual para no enfatizar lo de bajo nivel es que depende de la implementación, envejece rápido y es difícil de generalizar
      Además, no suele encajar bien con el tipo de “programador de sistemas”, porque tienden a convertir este tipo de conocimientos extremadamente específicos en toda su identidad profesional, así que termina habiendo gente que puede escribir ensamblador pero no sabe qué es un funtor
  • Parece que no hay buenos materiales académicos que profundicen en la optimización avanzada de compiladores
    Busqué bastante, pero la mayoría de los cursos son introductorios, y me sorprendió bastante que para llegar a técnicas realmente interesantes haya que meterse a fondo en el código fuente de compiladores populares de código abierto

    • La mayoría de los cursos académicos están excesivamente enfocados en parsing, y parecen enseñar lo demás solo de forma superficial
  • Creo que los compiladores son una de esas áreas que no avanzaron mucho en unos 30 años
    Cuando di clases en la Perugia University entre 2004 y 2006, podía usar sin mayor problema materiales de 15 a 25 años de antigüedad
    Últimamente parece que la situación cambió

    • Eso no es cierto
      Solo entre las cosas que se podían haber enseñado como contenido nuevo en 2004–2006, pero que probablemente no se cubrieron, están la construcción de SSA, la vectorización SLP y la superoptimización peephole automática; y esas son solo las que se me ocurren al momento
      Lo que no cambió son los libros de texto de compiladores. Se concentran demasiado en cómo construir generadores de parsers y casi no cubren cómo diseñar realmente un compilador, por no hablar del diseño moderno de arquitectura de computadoras. Esta queja existe desde hace décadas
    • No estoy de acuerdo
      En los últimos 10 años, el panorama evolucionó mucho hacia técnicas de compilación incremental
      Los avances teóricos se concentran sobre todo en los parsers, pero las implementaciones reales se aplican a todo el pipeline, hasta la optimización global de programas y la generación de código
    • Desde entonces, las pruebas de compiladores cambiaron bastante, y las pruebas aleatorias masivas se volvieron populares
    • No soy experto en diseño ni implementación de compiladores, pero el código máquina y el ensamblador a los que apuntan los compiladores parecen haber cambiado mucho con el tiempo
      Con cada nueva generación de procesadores aparecen más instrucciones y opciones, lo que parece crear nuevas optimizaciones o combinaciones que el compilador puede aprovechar
    • Probablemente sea porque la mayoría de los lenguajes de programación no cambiaron mucho en aspectos como ser imperativos, usar bucles y tener efectos secundarios amplios
      Para escribir un compilador para lenguajes puramente funcionales, definitivamente se necesitarían materiales nuevos
  • Me alegra que exista un curso así
    Ahora puedo seguir temas avanzados a mi propio ritmo y con guía
    Siempre quise una carrera como ingeniero de compiladores, pero donde vivo no hay muchas oportunidades de educación ni de empleo
    Al ver Estados Unidos, el mercado de contratación parece abrumadoramente competitivo y, francamente, no sé cómo entrar
    La experiencia que tengo es solo un curso que tomé en la licenciatura, aunque ese curso fue realmente excelente en todo

    • Este campo tiene una curva de aprendizaje brutal que muchas personas no logran superar
      Creo que se debe a que hay que escribir código que manipula otro código, y normalmente la semántica y los objetivos de comportamiento son bastante distintos. Además hay mucho conocimiento oral y ruido
      Por eso los equipos de compiladores prefieren especialmente a gente que ya lleva mucho tiempo construyendo compiladores. Pero, por supuesto, existe el problema de bootstrap, así que los equipos grandes también contratan egresados que parecen capaces de superar esa curva, y yo entré más o menos así
      Si tienes experiencia profesional general pero no experiencia en compiladores, una estrategia clara es entrar a una empresa que haga algo que ya conoces y que también tenga un equipo de compiladores, más o menos una “empresa de software bastante grande”, y buscar una movilidad horizontal
  • Me gusta que también incluya “A Unified Theory of Garbage Collection”
    Al menos estos estudiantes terminarán entendiendo correctamente la diferencia entre conteo de referencias y garbage collection por tracing

  • Si “CS 6120 es un curso de nivel doctorado de Cornell CS sobre implementación de lenguajes de programación, de Adrian Sampson”, ¿entonces es un curso bastante avanzado?
    No creo estar a nivel doctorado en ciencias de la computación

    • Es mejor no medir la preparación con las etapas académicas tradicionales
      Simplemente inténtalo; si puedes hacerlo, estás listo, y si no, todavía no
    • Que sea de doctorado no significa que sea más difícil que uno de licenciatura
      Solo pruébalo
  • Todavía parece, en general, bastante parecido al contenido que Gerhard Goos cubría hace 20 años en su curso general de construcción de compiladores
    También hay enlaces a papers más recientes, así que quizá valga la pena echarles un vistazo
    Me gustaba el libro Advanced Compiler Design and Implementation de Steven Muchnick
    Hace 18 años que no veo código fuente de compiladores, así que siento que me quedé atrás, especialmente en profiling y optimizaciones basadas en rutas, y al ver el machine learning actual, imagino que también habrá mucho más contenido avanzado relacionado con SIMD

  • Hace algunos años seguí este curso en línea durante el verano y aprendí muchísimo
    Abrir un PR para un pequeño issue de Bril IR y corregirlo junto con el profesor fue una experiencia muy inmersiva

  • Me pregunto si este curso tiene algún curso previo