1 Punkte von GN⁺ 8 시간 전 | 1 Kommentare | Auf WhatsApp teilen
  • CS 6120, ein Promotionskurs von Cornell CS, bietet für alle, die Compiler und die Implementierung von Programmiersprachen systematisch lernen wollen, einen durchgehenden Lernpfad von Zwischenrepräsentationen über Datenfluss, Optimierung, Parallelisierung und JIT bis hin zur Garbage Collection
  • Die selbstgesteuerte Version ist als 4-Credit-Kurs ohne Benotung an einer virtuellen Universität aufgebaut und führt in einem linearen Zeitplan durch Videos, Mitschriften, Paper-Lektüre und Implementierungsaufgaben
  • Für die Praxis werden LLVM und das Lehr-IR Bril verwendet, damit sich abstrakte Compilerkonzepte durch echtes Schreiben von Code nachvollziehen lassen
  • Anders als im regulären Cornell-Kurs können Abgabefristen ignoriert werden, eine Teilnahme an den Zulip-Diskussionen ist jedoch nicht möglich, und anstelle eines Semesterprojekts gibt es in der selbstgesteuerten Version eine eigene Abschlussaufgabe
  • Das Kursmaterial ist auf GitHub als Open Source veröffentlicht, sodass Probleme gemeldet werden können; nach Abschluss können Verbesserungsvorschläge über ein Feedback-Formular eingereicht werden

Kursaufbau und Teilnahme

  • CS 6120 ist ein Kurs zur Implementierung von Programmiersprachen von Adrian Sampson bei Cornell CS
  • Behandelt werden sowohl grundlegende Themen allgemeiner Compiler als auch forschungsnahe Themen
    • Zwischenrepräsentationen
    • Datenfluss
    • klassische Optimierungen
    • Parallelisierung
    • JIT-Kompilierung
    • Garbage Collection
  • Das Lernen setzt sich aus Paper-Lektüre und Open-Source-Hacking-Aufgaben zusammen
    • LLVM wird verwendet
    • das Lehr-IR Bril wird verwendet
  • Das selbstgesteuerte Curriculum ist als linearer Zeitplan aus Videos und Paper-Lektüre aufgebaut
  • Einige Lektionen enthalten Implementierungsaufgaben, bei denen abstrakte Konzepte durch offene Programmieraufgaben erlernt werden
  • Zwischen dem regulären CS 6120 und der selbstgesteuerten Version gibt es Unterschiede
    • Abgabefristen für Aufgaben können ignoriert werden
    • an Zulip-Diskussions-Threads kann nicht teilgenommen werden
    • im regulären Kurs gibt es ein Semesterprojekt
    • die Abschlussaufgabe der selbstgesteuerten Version lautet, „mit der Magie von Compilern die Welt zu verändern“
  • Der Kurs ist als Open Source auf GitHub veröffentlicht; bei Problemen können Bugs gemeldet werden
  • Nach Abschluss kann das Feedback-Formular ausgefüllt werden

Ablauf der Lektionen und Lektüren

1 Kommentare

 
GN⁺ 8 시간 전
Hacker-News-Kommentare
  • Der Teil über dynamische Compiler kommt fast vollständig einer Behandlung von Tracing-Compilern gleich. Im Allgemeinen war Tracing Compilation eine Sackgasse und wurde mehrfach wieder verworfen.
    Wichtiger sind hier aus meiner Sicht Konzepte wie Type Feedback, spekulative Ausführung und Deoptimierung, schnelle Compiler und Tiering.
    Der gesamte Kurs wirkt gut, und es ist großartig, dass so viel Material online veröffentlicht wurde.

    • Historisch hat sich gezeigt, dass Tracing als organisierendes Prinzip in der Praxis nicht sinnvoll ist, aber ich halte es für ein Konzept, das den eigenen Horizont erweitert, wenn man es gelernt hat.
      Wie gesagt, ich würde gern mehr Kontext dazu geben, was in der Industrie tatsächlich gut funktioniert.
    • Ich arbeite an torch.compile in PyTorch, und auch das ist ein Tracing-Compiler.
      Allerdings könnte dieser Bereich ziemlich eng sein und sich auch stark von traditionellen Compilern unterscheiden, sodass manche von dem, was wir tun, auf euch recht befremdlich wirken könnte.
    • JAX ist ebenfalls ein Tracing-Compiler.
      Natürlich ist mir klar, dass der Problemraum im Vergleich zu TraceMonkey oder LuaJIT extrem anders ist.
    • Der TraceMonkey-Paper stand auf der Leseliste für die Promotions-Qualifikationsprüfung, und der Prüfungszeitraum fiel zufällig genau in die Zeit, als TraceMonkey aus SpiderMonkey entfernt wurde.
      Ich habe damals mit einem der Entwickler gesprochen, vermutlich Jason Orendorff, und er meinte, Tracing funktioniere nicht besonders gut und sei vielleicht nur unter eingeschränkten Bedingungen möglich.
      Welche Bedingungen das waren, habe ich allerdings komplett vergessen.
    • Trace Compilation ist keine Sackgasse.
      LuaJIT funktioniert gut, auch bei großen Programmen und auf hunderten Millionen Servern und Geräten.
      Es ist wirklich schade, dass sogar Akademiker diese Floskel immer wieder wiederholen. Da fällt mir ein, dass Unwissenheit manchmal wirklich selig macht.
  • Frühere verwandte Beiträge:
    CS 6120: Advanced Compilers: The Self-Guided Online Course - https://news.ycombinator.com/item?id=39577878 - März 2024, 102 Kommentare
    Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=35130975 - März 2023, 82 Kommentare
    Advanced Compilers: Self-Guided Online Course - https://news.ycombinator.com/item?id=25386756 - Dezember 2020, 232 Kommentare

  • Ich bin etwas unsicher, warum dieser Kurs fortgeschritten sein soll. Die meisten Themen, etwa Dead Code Elimination, Datenfluss, Dominator-Analyse und SSA-Form, wirken so, als gehörten sie in einen ersten Compiler-Kurs.

    • Die Kursnummern sind recht systematisch, daher kann man nachsehen, was der Kurs „Compiler-Einführung“ ist: https://www.cs.cornell.edu/courses/cs4120/2026sp/?schedule
      Kurz gesagt sind Compiler faktisch in zwei Kurse aufgeteilt, und der erste behandelt die Mindestelemente zum Bau eines Compilers: lexikalische Analyse, Parsing, Codegenerierung und Registerallokation.
      Der zweite Kurs entspricht dann eher der Frage, wie man einen optimierenden Compiler baut.
    • Ich habe sehr viel dazu gelesen, aber solche Inhalte waren in den meisten Materialien nicht enthalten.
      In Wirklichkeit bleibt das Backend, ob bei Compilern oder Interpretern, fast immer als „Übungsaufgabe für den Leser“ zurück.
      Es ist schwer, sich vorzustellen, wie viel man noch herausfinden muss: wie man Closures erstellt, Umgebungen nachverfolgt, Pattern Matching implementiert, Speicherrepräsentationen gestaltet und vieles mehr.
      Alles Interessante muss man sich selbst zusammensuchen.
      P.S.: Das ist nur das Material eines einzigen Jahres: https://gist.githubusercontent.com/mamcx/e1743571b9a1ea163a7...
    • Ich denke, Nicht-Spezialisten beginnen meist mit Parsing und kommen oft nie zum Backend.
      Ich habe zwei Bücher über Interpreter und Compiler gelesen, und das Backend wurde darin kaum behandelt.
      Vielleicht ist das eher mit einem Einführungskurs ins Backend vergleichbar.
    • Dann frage ich mich, was daran fortgeschritten ist. Wenn Dead Code Elimination, Datenfluss, SSA, Instruction Selection und Registerallokation ordentlich behandelt werden, dann ist das praktisch 98 % des Backends.
  • Gibt es noch andere selbstgesteuerte Online-Universitätskurse in Informatik dieser Art?

    • Davon gibt es Dutzende. Man muss nur nach „mooc“ suchen.
      Manche Professoren veröffentlichen ihre Vorlesungen und Aufgaben auch außerhalb des „mooc“-Frameworks.
      Ich habe Professoren erlebt, die sogar auf Fragen in den Kommentaren geantwortet haben. Das Internet kann immer noch ziemlich großartig sein.
  • Wie unterscheidet sich der Nutzen für Leser im Vergleich zu Nora Sandlers Writing a C compiler?

    • Dieses Buch entspricht eher dem, was man in einem Compiler-Kurs auf Bachelor-Niveau mitnimmt, während dieser Kurs fortgeschrittenere Inhalte behandelt.
      Wenn man Anfänger ist oder sich als Hobby damit beschäftigt, ist es besser, mit diesem Buch oder ähnlichem Material auf vergleichbarem Niveau zu beginnen und dann diesen Kurs anzugehen, um die Lücken zu schließen.
  • Gibt es auch einen einführenden Compiler-Kurs zum Selbststudium, den man sich ansehen kann, bevor man in die fortgeschrittene Stufe einsteigt?

  • Ich habe einen Podcast über den Rust-Compiler gesehen, und ich glaube, dort wurde gesagt, dass an irgendeiner Stelle ein Machine-Learning-Algorithmus verwendet wird, um zu entscheiden, ob Code das System zum Absturz bringen kann.

    • Davon habe ich noch nie gehört und bin ziemlich sicher, dass das so nicht stimmt. Natürlich ist der Begriff „Machine Learning“ weit gefasst.
      Gibt es dafür eine Quelle?
  • Ich frage mich wirklich, was alexia massalin heutzutage macht, abgesehen davon, microunity-Patentlizenzen zu kassieren.