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 (x86, 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ý 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