Hlavní navigace

Clang/LLVM: potenciální konkurent překladače gcc

Roman Divácký

V nedávném článku o FreeBSD 8 padla zmínka o kombinaci Clang/LLVM. Jedná se o novinku ve FreeBSD, která zatím sice příliš vidět a slyšet není, ale vývojáři si od ní slibují vyřešení mnoha problémů. Má totiž v systému nahradit kompilátor gcc. Jak to funguje, na čem to běží, jak se to vyvíjí a co to umí?

LLVM (Low Level Virtual Machine) je projekt, který implementuje (low level) virtuální stroj. Jedná se o sadu instrukcí (v SSA formě), sadu optimalizací a sadu překladačů z LLVM byte kódu do nativních instrukcí reálných procesorů. SSA je forma zápisu instrukcí, kde je do každé proměnné zapsáno pouze jednou. Toto omezení umožňuje jednoduše využít některé optimalizace. Tento framework lze použít pro mnoho věcí, počínajíc implementací JustInTime optimalizátoru po konstrukci statického nativního překladače například jazyka C. LLVM v podstatě poskytuje celý „backend“ překladače.

Clang je „frontend“ překladače z jazyků C rodiny (C resp. C99, Objective C a C++) do LLVM byte kódu. Spojením těchto dvou nám tedy vzniká plnohodnotný překladač. Clang umí kromě statické kompilace kódu i další věci: statickou analýzu, code completion, refactoring, indexing atp. Statická analýza je způsob jak zkontrolovat některé časté problémy, kterých se programátoři dopouští jako například zápis za konec pole, referencování NULLu atp staticky během kompilace místo runtime. Code completion je pomůcka pro IDE nástroje, viz. například IntelliSense atp. Refactoring je metoda která nám umožňuje třeba masově přejmenovat metodu nebo proměnou s ohledem na kontext, tj. inteligentněji a přesněji než sed. Indexace je způsob který umožňuje skočit na místo definice struktury, proměnné atp. bez lineárního vyhledávání (cscope, ctags atp.). Hlavním cílem je ovšem statická kompilace. Jedním z hlavních cílů Clangu je prakticky 100% kompatibilita s gcc. Prakticky to znamená, že člověk může nahradit gcc Clangem při kompilaci programů v jazycích C/C++/ObjC.

LLVM i Clang jsou psány v podmnožině C++ se silným využitím templatů a bez použití výjimek. Jsou psány jako všeobecně znovu použitelné knihovny.

LLVM nabízí podporu pro tyto architektury: ARM, Alpha, Blackfin, Cell, MSP430, Mips, PIC16, PowerPC, Sparc, SystemZ a X86. K dispozici je velké množství různých optimalizací včetně možnosti Link Time Optimizace. Celkově je kvalita výsledného kódu podobná jakou má gcc. LLVM je obecně rychlejší při optimalizacích než gcc a používá méně paměti.

Clang parsuje kód rychleji než gcc a používá méně paměti. Clang uchovává víc informací z původního zdrojového kódu než gcc a tudíž má daleko expresivnější chybové hlášky a varování. Srovnejte:

   $ gcc-4.2 -fsyntax-only t.c
   t.c:7: error: invalid operands to binary + (have 'int' and 'struct A')

   $ clang -fsyntax-only t.c
   t.c:7:39: error: invalid operands to binary expression ('int' and 'struct A')
     return y + func(y ? ((SomeA.X + 40) + SomeA) / 42 + SomeA.X : SomeA.X);
                          ~~~~~~~~~~~~~~ ^ ~~~~~

LLVM i Clang se distribuují pod BSDL-like licencí a když chce někdo poslat patch, tak nemusí posílat žádné prohlášení do FSF. Stačí vytvořit bug v projektové bugzille a patch připojit. Dle mých zkušeností je odezva většinou velmi rychlá a opravy/vylepšení jsou rychle integrovány.

LLVM je aktuálně ve verzi 2.6 a je produkčně využíváno např. v Mac OS X pro akceleraci softwarové implementace OpenGL. Clang je zatím ve verzi 1.0, kde je C a ObjC považováno za produkčně kvalitní (zkompiluje v podstatě veškerý C a ObjC kód který existuje) a C++ je v pokročilé fázi vývoje (aktuální SVN trunk dokáže přeparsovat kompletní libstdc++ z gcc 4.2 a celkově zkompilovat některé jednodušší programy, např. gperf).

LLVM vzniklo na univerzitě v Illinois jako diplomová práce Chrise Lattnera, který je stále vůdčím vývojářem a leaderem projektu. Firma Apple najala Chrise a několik dalších vývojářů pro práci na LLVM a především Clangu. Apple je hlavním sponzorem vývoje, ale vývojáře LLVM zaměstnává mnoho firem od Craye, přes Intel a AMD po Google. LLVM i Clang jsou přesto plně open source projekty, do kterých může přispívat každý. Komunita vývojářu je velmi přátelská a vstřícná.

LLVM používá jako svůj optimalizační backend v podstatě každý „open source jazyk“, který existuje: perl (experimentální patche), python, ruby, haskell a další. Používá se velmi intenzivně v Mac OS X (Apple chce za svoje peníze výsledky).

Clang je mladší projekt a není zatím tolik používaný (první oficiální release byl před dvěma měsíci), ale stejně. Sun má svůj statický analyzer parfait založený na Clangu. Apple dodává Clang v rámci svého vývojářského balíku Xcode. FreeBSD se snaží nahradit systémový překladač gcc právě kombinací LLVM/Clang.

FreeBSD experimentuje s Clangem jako systémovým překladačem. Zatím je tato snaha omezena na architektury i386 and amd64. Existuje experimentální větev pro integraci s celým FreeBSD. Aktuální status je takový, že Clang dokáže skompilovat v podstatě veškerý C kód ve FreeBSD, všechen ObjC kód (kterého je velmi málo) a 2 z 5ti C++ aplikací (devd a gperf). Situace kolem C++ se velmi rychle vyvýjí (před měsícem a pul nedokázal Clang skompilovat ani iostream Hello World v C++) a lze očekávat, že Clang bude schopen skompilovat všechen C++ kód ve FreeBSD do konce tohoto roku. Bootstrap (tj. kompilaci Clangu Clangem) bude doufejme dostupný na jaře 2010.

Při pokusné kompilaci stromu portů ve FreeBSD byl Clang schopen skompilovat více jak 90 % C aplikací. Většina problémů vzniká z důvodu, že Clang kompiluje defaultně C99 zatímco gcc preferuje C89 a hodně aplikací očekává C89 sémantiku (hlavně gnu89 inline).

Závěrem lze říct, že Clang je moderní překladač, který nabízí mnoho vylepšení oproti tradičnímu gcc ovšem je zatím ještě méně vyspělý a otestovaný oproti gcc. Zkuste otestovat jestli se vaše C aplikace dá skompilovat pomocí Clangu. Možná oceníte rychlost kompilace a expresivní varování a chyby. Možná začnete Clang používat místo gcc…

Zdroje:
www.llvm.org
clang.llvm.org

Našli jste v článku chybu?

9. 12. 2009 14:03

petko (neregistrovaný)

Nebolo tazke najst benchmark, ktory vyvracia toto tvrdenie a to som si ho ani nemusel falsovat sam :)
http://eigen.tuxfamily.org/index.php?…


27. 3. 2012 8:30

SB (neregistrovaný)

Co je na pravidlu o změně kmenové souhlásky nejasného?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: Test Philips 24PFS5231 s Bluetooth repro

Test Philips 24PFS5231 s Bluetooth repro

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase