Die "Low Level Virtual Machine" Compiler-Infrastruktur
LLVM (Low Level Virtual Machine) steht für eine neue Infrastruktur für Compiler, die sich anschickt, der GNU Compiler Collection (gcc) Konkurrenz zu machen. Es stellt eine umfangreiche Modulsammlung bereit, aus der sich Entwickler bedienen können, um performante Compiler für neue oder existierende Programmiersprachen zu erzeugen. Im Gespräch mit Tim Pritlove erläutert Tim Sander von seinen Erfahrungen mit dem System. Zur Sprache kommen die Architektur der LLVM-Infrastruktur, bislang existierende Frontends und Backends, Lizenz und Anwendungsfälle von LLVM.
Tim Pritlove
Twitter
Website
Spenden via PayPal
Tim Sander
Website
Max Merz
(Shownotes)
Pinboard
Twitter
Shownotes
Intro Jon Stewart CRE Intro Begrüßung Tim ist immer noch auf Reisen LLVM (Low Level Virtual Machine) Tim Sander TU Darmstadt Hardware Software Co-Design Compiler Bus Multiplexer CPU Registersatz Pipeline GCC Anwendungsfälle für Hardware Software Co-Design Koprozessor FPGA Fehlertoleranz Grundlagenforschung Grafikkarte Moore’s Law Transistor Parallelisierung LLVM Überblick GCC The LLVM Compiler Infrastructure LLVM ist modular aufgebaut Geschichte von LLVM Lifelong Optimization JIT-Compilation (“JITing”) Skriptsprachen Interpreter Bytecode Maschinencode Dynamische Typisierung Javascript Komponenten von LLVM llvmc (LLVM Compiler Driver) LLVM Frontend GCC-Frontend Brainfuck Zwischencode Static Single Assignments GCC hat mit Version 4 auf SSA umgestellt Alle LLVM-Optimierungsläufe laufen auf der internen Beschreibungssprache Parser Java C C++ Fortran Objective-C GPL LLVM Lizenz University of Illinois/NCSA Open Source License BSD Andere Frontends clang Wikipedia Projekt-Homepage Assembler LLVM Middleware Optimierungsläufe Dead Code elimination LLVM Backend Beschreibung der Ziel-Maschine Von-Neumann-Architektur Harvard-Architektur x86 ADM64 ARM PowerPC Vektorrechner SIMD (Single Instruction, Multiple Data) OpenGL Shader Zusammenfassung Vergleich zum GCC Java VM LLVM und GCC setzen auf Static Single Assignments auf Unterschiede liegen in der Implementierung LLVM Dokumentation Softwarearchitektur GCC Gimple GCC RTL “Gnade der späten Geburt” LLVM Zwischensprache Die Operationen sind ähnlich zu Assembler Register In SSA ist jeder Datenplatz ein-eindeutig Modulgröße im Backend Compilezeiten Fehlermeldungen von clang Apple und clang Chris Lattner Mutmaßungen zur Strategie von Apple Fehlermeldungen Compilezeiten JIT-Kompilierung Zwischensprache ist sehr kompakt und kann mitgespeichert werden Parallelisierung Multiple Cores SIMD (Single Instruction, Multiple Data) Parallelisierung des Compile-Vorgangs Parallelisierung des produzierten Codes Flynnsche Klassifikation AltiVec SSE Dynamische Typisierung Skriptsprache Runtime Praktische Anwendung Wo kommt LLVM schon zum Einsatz? Adobe Flash LLVM Developer Meeting 2008 Vortrag von Scott Petersen Vortragsfolien Video Hi Video Lo Ressourcen LLVM Developer Meetings Vortrag von Tim Sander Vortragsfolien Video Hi Video Lo Google Tech Talk: Chris Lattner: LLVM 2.0 LLVM Developer Meeting 2008 Doxygen LLVM Doxygen Dokumentation LLVM Online Compiler Für wen ist LLVM interessant? Sample Frontend Tims Optimierungslauf Macht Spaß in der Forschung Compilerbau “Und dann kam die Aussage: ‘Compilerbau ist doch tot, da entwickelt sich doch nichts mehr.’” (Tim Sander) “Und für jemanden, der Informatik studiert und noch ein schönes Diplomthema braucht wäre das dann vielleicht auch der richtige Sandkasten, in den man sich mal reinsetzt um mal ordentlich mit Sand zu werfen.” (Tim Pritlove) Abschluss CRE Outro