Obsah

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:

2. LLVM IR: Srdce systému

LLVM IR je „společný jazyk“ celého frameworku. Je to nízkoúrovňový kód podobný 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

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