ScholarGate
Assistent

Compiler und Implementierung

Compilerbau und Sprachimplementierung wandeln High-Level-Programme in ausführbaren Code um, wobei Analyse, Übersetzung, Optimierung und Laufzeitunterstützung abgedeckt werden.

Thema finden mit PaperMindDemnächstFind papers & topics
Tools & resources
Folien herunterladen
Learn & explore
VideoDemnächst

Definition

Compilerbau und Sprachimplementierung umfassen die Techniken zur Übersetzung von Programmen, die in einer Quellsprache geschrieben sind, in eine Form, die effizient ausgeführt werden kann, zusammen mit der erforderlichen Laufzeitinfrastruktur zur Unterstützung dieser Ausführung.

Scope

Dieser Bereich umfasst das Engineering und die Theorie der Implementierung von Programmiersprachen: lexikalische und syntaktische Analyse, semantische Analyse, Zwischenrepräsentationen, Codegenerierung und -optimierung sowie die Laufzeitsysteme, virtuellen Maschinen und Speicherverwaltungen, die die Ausführung unterstützen. Er behandelt sowohl die Ahead-of-Time- als auch die Just-in-Time-Kompilierung und das Zusammenspiel zwischen Sprachdesign und effizienter Implementierung.

Sub-topics

Core questions

  • Wie wird Quelltext in effizienten ausführbaren Code umgewandelt?
  • Welche Zwischenrepräsentationen unterstützen Analyse und Optimierung am besten?
  • Wie bewahren Optimierungen die Programmbedeutung, während sie die Leistung verbessern?
  • Welche Laufzeit- und Speicherverwaltungsunterstützung benötigt eine Sprache?

Key theories

Die klassische Compiler-Pipeline
Das Dragon Book organisiert die Kompilierung in Phasen (Lexing, Parsing, semantische Analyse, Zwischencode, Optimierung, Codegenerierung) und etabliert damit die Standardarchitektur moderner Compiler.
Wiederverwendbare Compiler-Infrastruktur (LLVM)
Lattner und Adve führten ein Compiler-Framework ein, das auf einer typisierten Zwischenrepräsentation basiert und Analyse und Transformation über Kompilierzeit, Linkzeit und Laufzeit hinweg unterstützt.
Moderne Compiler-Design-Methodik
Appel und Muchnick präsentieren strukturierte, datenfluss- und SSA-basierte Ansätze zum Bau optimierender Compiler, die die in Produktions-Toolchains verwendeten Algorithmen kodifizieren.

Clinical relevance

Compiler sind eine zentrale Infrastruktur: Ihre Korrektheit und die Qualität ihrer Optimierungen beeinflussen direkt die Zuverlässigkeit und Leistung praktisch aller Software. Wiederverwendbare Frameworks wie LLVM haben die Kosten für die Entwicklung neuer Sprachen und die Zielausrichtung auf neue Hardware gesenkt.

History

Die Compilertechnologie begann in den 1950er Jahren mit dem optimierenden Compiler von Fortran. Formale Parsing-Theorie (LL, LR) und Datenflussanalyse reiften in den 1960er und 1970er Jahren und wurden im Dragon Book von 1986 kodifiziert. Die statische Single-Assignment-Form und aggressive Optimierung entwickelten sich in den 1990er Jahren weiter, und in den 2000er Jahren entstanden wiederverwendbare Infrastrukturen wie LLVM und die weit verbreitete Just-in-Time-Kompilierung.

Debates

Ahead-of-Time- versus Just-in-Time-Kompilierung
Implementierer wägen die Ahead-of-Time-Kompilierung, die die Optimierung vorverlagert und einen vorhersehbaren Start ermöglicht, gegen die Just-in-Time-Kompilierung ab, die Laufzeitprofile nutzen kann, aber Aufwärm- und Laufzeit-Overhead hinzufügt.

Key figures

  • Alfred Aho
  • Jeffrey Ullman
  • Andrew Appel
  • Chris Lattner
  • Frances Allen

Related topics

Seminal works

  • aho2006
  • appel1998
  • muchnick1997
  • lattner2004

Frequently asked questions

Was sind die Hauptphasen eines Compilers?
Ein typischer Compiler führt lexikalische Analyse, Parsing, semantische Analyse, Zwischencode-Generierung, Optimierung und Zielcode-Generierung durch, oft als Frontend, Middle-End und Backend beschrieben.
Was ist der Unterschied zwischen einem Compiler und einem Interpreter?
Ein Compiler übersetzt ein Programm vor der Ausführung in eine andere Form (z. B. Maschinencode), während ein Interpreter das Programm direkt ausführt; viele moderne Systeme kombinieren beides, zum Beispiel durch Just-in-Time-Kompilierung.

Methods for this concept

Related concepts