- Le cours de niveau doctorat CS 6120 de Cornell CS propose, pour celles et ceux qui veulent apprendre de façon structurée les compilateurs et l’implémentation des langages de programmation, un parcours continu allant des représentations intermédiaires au data flow, à l’optimisation, au parallélisme, au JIT et au garbage collection
- La version autodirigée se suit comme dans une université fictive, en 4 crédits sans note, avec un planning linéaire combinant vidéos, notes de cours, lecture d’articles et travaux d’implémentation
- La partie pratique utilise LLVM et Bril, un IR pédagogique, afin de relier les concepts abstraits des compilateurs à l’écriture de code réelle
- Contrairement au vrai cours Cornell, il est possible d’ignorer les dates limites des devoirs, mais on ne peut pas participer aux discussions Zulip, et un devoir final propre à la version autodirigée remplace le projet de fin de semestre
- Les supports du cours sont publiés en open source sur GitHub, ce qui permet de signaler des problèmes, et un formulaire de retour permet d’envoyer des suggestions d’amélioration après avoir terminé
Structure du cours et mode de suivi
- CS 6120 est un cours sur l’implémentation des langages de programmation créé par Adrian Sampson de Cornell CS
- Il couvre à la fois les thèmes fondamentaux des compilateurs généralistes et des sujets à caractère plus recherche
- représentations intermédiaires
- data flow
- optimisations classiques
- parallélisation
- compilation JIT
- garbage collection
- L’apprentissage se prolonge par la lecture d’articles et des travaux pratiques sur de l’open source
- Le cursus autodirigé est construit comme un planning linéaire mêlant visionnage de vidéos et lecture d’articles
- Certaines leçons incluent des travaux d’implémentation, avec de l’écriture de code en format ouvert pour assimiler des concepts abstraits
- Il existe des différences entre le vrai CS 6120 et la version autodirigée
- les dates limites des devoirs peuvent être ignorées
- il n’est pas possible de participer aux fils de discussion Zulip
- le vrai cours comporte un projet de fin de semestre
- le devoir de fin de parcours de la version autodirigée consiste à « changer le monde grâce à la magie des compilateurs »
- Le cours est publié en open source sur GitHub, ce qui permet de signaler des bugs en cas de problème
- Il est possible de remplir un formulaire de retour après avoir terminé
Parcours des leçons et des lectures
-
Introduction et représentation des programmes
-
Bases de l’analyse et de l’optimisation
-
LLVM et optimisation de boucles, analyse interprocédurale
-
Gestion mémoire et compilateurs dynamiques
-
Parallélisme et compilateurs rapides
- Lesson 13: Concurrency & Parallelism
- Lesson 14: Fast Compilers
- seul le titre figure dans la liste
1 commentaires
Commentaires Hacker News
La partie sur les compilateurs dynamiques porte presque entièrement sur la compilation par traces. En général, la compilation par traces a été une impasse et a été abandonnée à plusieurs reprises
Les notions plus importantes ici me semblent être le retour de type, l’exécution spéculative et la désoptimisation, ainsi que les compilateurs rapides et la compilation hiérarchisée
L’ensemble du cours a l’air très bien, et c’est formidable que tant de ressources aient été mises en ligne
Comme tu l’as dit, j’aimerais simplement donner davantage de contexte sur ce qui fonctionne réellement dans l’industrie
Cela dit, ce domaine est peut-être assez étroit, et il diffère aussi beaucoup des compilateurs traditionnels, donc certains aspects de ce que nous faisons pourraient vous mettre assez mal à l’aise
Bien sûr, je sais que l’espace de problèmes est radicalement différent de celui de TraceMonkey ou LuaJIT
J’ai parlé à l’un des développeurs de l’époque, probablement Jason Orendorff, et il disait que le tracing ne donnait pas vraiment de bons résultats, même s’il pensait que cela pouvait marcher dans des conditions limitées
En revanche, j’ai complètement oublié quelles étaient ces conditions
LuaJIT fonctionne très bien, y compris sur de gros programmes et sur des centaines de millions de serveurs et d’appareils
C’est vraiment regrettable que même les universitaires continuent à répéter ce lieu commun. Cela me rappelle que l’ignorance fait parfois le bonheur
Articles précédents liés :
CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - mars 2024, 102 commentaires
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - mars 2023, 82 commentaires
Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - décembre 2020, 232 commentaires
Je suis un peu perplexe sur la raison pour laquelle ce cours est avancé. La plupart des sujets, comme l’élimination de code mort, le flot de données, l’analyse des dominateurs ou la forme SSA, ressemblent à des éléments qu’on verrait dans un premier cours sur les compilateurs
En bref, les compilateurs sont en fait divisés en deux cours, et le premier traite du minimum nécessaire pour construire un compilateur : analyse lexicale, analyse syntaxique, génération de code et allocation de registres
Le deuxième cours correspond à la manière de construire un compilateur optimisant
En pratique, qu’il s’agisse d’un compilateur ou d’un interpréteur, le backend est presque toujours laissé comme un « exercice au lecteur »
Il est difficile d’imaginer tout ce qu’il reste à découvrir : comment construire des closures, suivre des environnements, faire du pattern matching, représenter la mémoire, etc.
Tout ce qui est intéressant, il faut aller le chercher soi-même
P.-S. : ceci ne représente qu’une seule année parmi d’autres : https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
J’ai lu deux livres sur les interpréteurs et les compilateurs, et ils ne couvraient pas beaucoup le backend
C’est peut-être plus proche d’un cours d’introduction au backend
Existe-t-il d’autres cours universitaires d’informatique en ligne en autonomie de ce type ?
Certains professeurs publient aussi leurs cours et leurs devoirs en dehors des frameworks « mooc »
Il m’est même arrivé d’avoir une réponse d’un professeur après avoir posé une question en commentaire. Internet peut encore être assez génial parfois
Par rapport à Writing a C compiler de Nora Sandler, quel type de bénéfice le lecteur peut-il en tirer différemment ?
Pour un débutant ou quelqu’un qui explore le sujet par loisir, mieux vaut commencer par ce livre ou des ressources de niveau comparable, puis tenter ce cours en comblant les lacunes au fur et à mesure
Existe-t-il aussi un cours autodidacte sur les bases des compilateurs à suivre avant de passer à un niveau avancé ?
Si vous voulez commencer par les interpréteurs, Essentials of Programming Languages [4] est un bon choix
Je reconnais que Crafting Interpreters est populaire ici et ailleurs, mais personnellement je n’aime pas trop. Cela dit, d’autres l’apprécient, donc ça vaut le coup d’essayer, et c’est disponible gratuitement
EOC et EOPL sont un peu académiques, mais à part pour les personnes peu à l’aise avec Scheme et Racket, je les trouve assez accessibles
La version Python de EOC atténue ce problème
Après cela, les ouvrages de compilation plus profonds et plus académiques deviennent beaucoup plus abordables
[1] https://mitpress.mit.edu/9780262047760/essentials-of-compila... - version Racket, avec une version open access
[2] https://mitpress.mit.edu/9780262048248/essentials-of-compila... - version Python, avec une version open access
[3] https://nostarch.com/writing-c-compiler - possibilité de choisir le langage d’implémentation
[4] https://mitpress.mit.edu/9780262062794/essentials-of-program... - en Scheme, mais utilisable avec Racket
C’est divisé en deux parties : la première construit un interpréteur par parcours d’arbre en Java, puis on passe à une version écrite en C
https://github.com/jamiebuilds/the-super-tiny-compiler
En le lisant avec quelques-uns des livres modernes recommandés ici, cela devrait être largement suffisant
David Gries - https://www.cs.cornell.edu/gries/ et https://en.wikipedia.org/wiki/David_Gries
Le Néerlandais Dick Grune, informaticien, a écrit à propos de Compiler Construction for Digital Computers : « plusieurs générations de concepteurs de compilateurs ont grandi avec ce livre, et ils ne l’ont pas regretté »
Dick Grune lui-même est aussi connu pour ses livres sur les compilateurs et les langages de programmation - https://dickgrune.com/index.html et https://en.wikipedia.org/wiki/Dick_Grune
J’ai écouté un podcast sur le compilateur Rust, et il me semble qu’ils disaient qu’à un certain stade, un algorithme d’apprentissage automatique intervenait pour déterminer si un code pouvait faire planter le système
Tu aurais une source ?
Je me demande vraiment ce qu’alexia massalin fait ces jours-ci, en dehors de percevoir des royalties de brevet sur microunity