LLVM
Kurz: LLVM ist ein Baukasten für Compiler: Viele Sprachen übersetzen in dieselbe Zwischendarstellung, und LLVM optimiert sie und erzeugt Maschinencode für viele Prozessoren.
Genauer: Statt für jede Sprache und jeden Prozessor einen eigenen kompletten Compiler zu bauen, trennt man Vorderseite (Sprache) und Rückseite (Prozessor) durch die gemeinsame LLVM-IR.
Im Detail
- Aufbau: Frontend (zum Beispiel Clang für C/C++,
rustcfür Rust, Swift) → LLVM-IR → Optimierungsdurchläufe → Backend (x86, ARM, RISC-V, WebAssembly, GPU). - IR: Eine typisierte, einfache Zwischensprache in SSA-Form (jede Variable wird nur einmal zugewiesen), was Optimierungen erleichtert.
- Optimierungen: Inlining, Schleifenoptimierung, Vektorisierung (SIMD), Konstantenfaltung.
- Nebenprodukte: Clang-Tidy, Sanitizer (AddressSanitizer), der Debugger LLDB.
- Vorteil: Neue Sprachen entstehen schneller, neue Prozessoren erhalten sofort viele Sprachen.
- Ausblick: Alternativen wie GCC bleiben wichtig, und manche Sprachen nutzen eigene Backends (Go).
Siehe auch: Zwischendarstellung und Compiler-Optimierung