====== LLVM (Compiler Infrastructure) ====== **LLVM** je projekt, který od základu změnil způsob, jakým se vyvíjejí moderní programovací jazyky. Projekt založil v roce 2000 Chris Lattner na University of Illinois. Dnes je LLVM základem pro jazyky jako **Swift**, **Rust**, **Kotlin**, **Clang** ([[C++]]) a mnoho dalších. ===== 1. Filozofie a architektura (Třífázový design) ===== Klíčem k úspěchu LLVM je jeho striktní rozdělení na tři nezávislé části: * **Frontend:** Překládá konkrétní programovací jazyk (např. C++, Rust, Swift) do univerzálního mezikódu zvaného **LLVM IR** (Intermediate Representation). * **Optimizer:** Provádí transformace a optimalizace nad kódem LLVM IR. Protože je kód v tomto bodě univerzální, stejné optimalizace fungují pro všechny jazyky. * **Backend:** Překládá optimalizovaný mezikód do strojového kódu pro konkrétní hardware ([[CPU|x86]], [[CPU|ARM]], RISC-V, WebAssembly). ===== 2. LLVM IR: Srdce systému ===== **LLVM IR** je "společný jazyk" celého frameworku. Je to nízkoúrovňový kód podobný [[Assembly Language|Assembleru]], ale nezávislý na procesoru. ^ Forma IR ^ Popis ^ | **Textová (.ll)** | Čitelná pro člověka, slouží k ladění. | | **Bitcode (.bc)** | Binární formát pro efektivní ukládání a přenos mezi fázemi překladu. | | **In-memory** | Datové struktury v paměti používané během kompilace. | Tento mezikód umožňuje technologii **LTO (Link Time Optimization)**, kdy překladač optimalizuje celý program až v momentě spojování všech částí dohromady, což dramaticky zvyšuje výkon výsledné aplikace. ===== 3. Klíčové součásti ekosystému LLVM ===== * **Clang:** Špičkový kompilátor pro C, [[C++]] a Objective-C. Je známý svou rychlostí a extrémně srozumitelnými chybovými hláškami. * **LLDB:** Moderní debugger, který je součástí projektu LLVM a je integrován například v Xcode. * **LLD:** Extrémně rychlý linker (často několikanásobně rychlejší než klasický GNU ld). * **MLIR:** Moderní framework pro reprezentaci kódu pro specifické domény, jako je umělá inteligence a strojové učení. ===== 4. Srovnání: LLVM/Clang vs. GCC ===== ^ Vlastnost ^ LLVM / Clang ^ GCC ^ | **Architektura** | Modulární (knihovny). | Monolitická (aplikace). | | **Licence** | Apache 2.0 (velmi liberální). | GPL (přísně svobodná). | | **Diagnostika** | Vynikající, barevné a přesné chyby. | Tradiční, někdy hůře srozumitelné. | | **Využití** | Ideální pro IDE (analýza kódu za běhu). | Tradiční silná volba pro [[Linux]] kernel. | ===== 5. Proč je LLVM důležité pro budoucnost? ===== 1. **Nové jazyky:** Díky LLVM stačí autorovi nového jazyka napsat pouze "Frontend". O zbytek (optimalizace pro všechny procesory světa) se postará LLVM. 2. **JIT (Just-In-Time) kompilace:** LLVM umožňuje kompilovat kód za běhu programu (využívá např. Julia nebo JavaScriptové enginy). 3. **WebAssembly (Wasm):** LLVM je hlavním nástrojem pro kompilaci jazyků jako C++ nebo Rust do webových prohlížečů. --- > **Zajímavost:** Společnost Apple byla jedním z největších sponzorů LLVM, protože potřebovala moderní kompilátor, který by nebyl vázán licencí GPL, a umožnil tak lepší integraci do jejich uzavřených nástrojů (Xcode). //Související: [[C++]], [[GCC]], [[Assembly Language]], [[Linux]]//