Die dreistufige Compilerstruktur
Ein moderner Compiler ist typischerweise in drei Phasen strukturiert: Front-End, Middle-End und Back-End. Das Front-End analysiert den Quellcode, prüft ihn auf Korrektheit und erstellt eine Zwischendarstellung (IR). Das Middle-End führt Optimierungen an dieser IR durch. Das Back-End übersetzt dann die optimierte IR in Zielmaschinencode für eine bestimmte CPU-Architektur.
Dieses modulare dreistufige Design ermöglicht eine entscheidende Trennung der Belange. Das Frontend ist sprachabhängig, aber maschinenunabhängig; es versteht die Syntax und Semantik einer bestimmten Sprache wie C++ oder Rust. Seine Ausgabe, die Intermediate Representation (IR), ist eine abstrakte, maschinenunabhängige Datenstruktur wie ein Abstract Syntax Tree (AST) oder Three-Address Code. Dadurch wird die Quellsprache von der Zielmaschine entkoppelt.
Der mittlere Bereich ist weitgehend sprach- und maschinenunabhängig. Er verwendet die IR und wendet eine Reihe von Optimierungsdurchläufen an, wie z. B. die Eliminierung von Dead Code, Konstantenfaltung und Schleifenoptimierungen. Da er auf der generischen IR operiert, können diese komplexen Optimierungen einmal geschrieben und auf jede Sprache angewendet werden, die in diese IR kompiliert werden kann.
Das Backend schließlich ist maschinenabhängig, aber sprachunabhängig. Es verwendet die optimierte IR und führt Befehlsauswahl, Registerzuweisung und Befehlsplanung durch, um effizienten Maschinencode für eine bestimmte Zielarchitektur wie x86-64 oder ARM zu generieren. Diese Struktur ermöglicht die Entwicklung von Compilern, die M Sprachen und N Ziele unterstützen, indem M Frontends und N Backends anstelle von M*N einzelnen Compilern geschrieben werden. Dieses Prinzip wird durch moderne Compiler-Infrastrukturen wie GCC und LLVM veranschaulicht.
UNESCO Nomenclature: 1203
- Computerwissenschaften
Verwendung
Weitverbreitete Verwendung
Vorläufer
- frühe monolithische Compiler-Designs
- Konzept der Abstraktion in der Softwareentwicklung
- Entwicklung von Zwischensprachen in frühen Systemen
- Forschung zu portabler Software (zB das P-Code-System)
Anwendungen
- Retargetable Compiler (zB GCC, llvm)
- Cross-Kompilierung für verschiedene Hardwareplattformen
- sprachunabhängige Optimierungsframeworks
- Entwicklung neuer Programmiersprachen durch die bloße Erstellung eines neuen Frontends
- statische Analysetools, die auf Zwischendarstellungen basieren
Potenzielle Innovationsideen
Aufgrund des hohen Datenverkehrs durch Web-Scraping-Bots, der derzeit mehr als 40.000 Anfragen pro Tag umfasst, ist dieser Inhalt ausschließlich Community-Mitgliedern vorbehalten.
> Anmelden < oder > Registrieren < (100% kostenlos) Zugriff darauf sowie auf alle anderen eingeschränkten Inhalte und Tools.
Verwandt mit: Compilerentwurf, Front-End, Middle-End, Back-End, Zwischendarstellung, ir, Optimierung, Codegenerierung, Modularität, GCC, llvm.