SproutCore, o němž se objevily zprávy minulý týden, stále nejsou jedninou novinkou, která se dostal z tajné WWDC konference, díky open source. Další budoucí technologií, kterou Apple zamýšlí využít je LLVM - Low Level Virtual machine kompilátor.
Stejně jako SproutCore, LLVM není ani nový ani tajný, ale skrýval se před pozorností díky tenké vrstvě komplexity, která komplikuje jeho budoucí potenciál.
Stopa LLVM se objevuje ve veřejné verzi plánu WWDC, kde přednáška "New Compiler Technology and Future Directions" má tento popis:
"Xcode 3.1 uvádí dva nové kompilátory pro Mac OS X: GCC 4.2 a LLVM-GCC. Zjistěte jako nové bezpečnostní a výkonnostní vylepšení v GCC 4.2 vám mohou pomoci při vývoji lepších aplikací. Porozumíte novinkách v LLVM-GCC a zjistíte, jak jej můžete použít při vlastním testování a vývoji. A nakonec získejte představu a budoucím vývoji kompilátorů."
GCC je dobře známý GNU C kompilátor. Projekt začal uprostřed 80-tých letech Richardem Stallmanem. Stallmanova radikální myšlenka byla vyvinutí software, který bude sdílený místo prodáván s myšlenkou, že každý bude muset publikovat kód, který ten původní upravil.
Stallman pracoval na volně šiřitelné verzi AT&T Unixu, který se byl (AT&T Unix) v té době standardním operačním systémem na akademické půdě. Začal od základů: aby mohl vyvinout cokoliv v jazyku C, bude potřebovat C překladač, který jazyk vysoké úrovně převede na strojový kód spustitelný na architektuře, kterou potřeboval.
GCC proběhlo mnoha vylepšeními a během let se stal standardním kompilátorem pro GNU Linux, BSD Unix, Mac OS X a další operační systémy. GCC podporuje mnoho cílových architektur a několik odnoží jazyka C.
Apple používá specializovanou verzi GCC 4.0 a 4.2 v Leopardím Xcode 3.1, podporující Objective-C/C/C++ kód pro PowerPC i Intel na stolních počítačích a používá GCC 4.0 pro ARM procesor u iPhone.
Kompilace zdrojového textu prováděná GCC má několik fází. Při popisu jednotlivých fází raději ponechám názvy v originálu.
- Front End Parser - provádí úvodní jazykovou a sémantickou analýzu zdrojového kódu aby vytvořil interní reprezentaci programu.
- Optimizer - vylepšuje vzniklý kód tím, že maže některé nadbytečné části kódu nebo kódu, který není zapotřebí ve finální verzi.
- Code Generator - přebírá optimalizované kód a mapuje je na výsledný procesor, výstupem je pak strojový kód (assembler), prakticky nečitelný člověkem.
- Assembler - převádí assembler do objektového kódu, který může být interpretován procesorovým hardware nebo virtuálním stojem.
- Linker - je poslední fáze kompilace při které se kombinují objekty kódu s knihovnami, aby se vytvořil finální program.
GCC zvládá všechny tyto fáze při kompilaci v Xcode, Mac OS X IDE (Integrated Development Environment). Nicméně použití GCC má některé nevýhody.
Jednou z nich je GPL licence, což znamená, že Apple jej nemůže přímo integrovat do Xcode aplikace, bez nutnosti uvolnit IDE pod GPL. Apple preferuje licence BSD/MiT, který nemá toto omezení.
Dalším problémem je stáří programu GCC. LLVM je na rozdíl od něj modernějším, který se na kompilaci podíval trochu jinak, a klade důraz na Just In Time kompilaci, cross-file optimalizaci (kde může spojit kód z různých jazyků a optimalizovat tak za hranice souborů) a modulární architekturu kompilátoru pro vytvoření komponent, které mají méně závislostí navzájem při zachování integrace s existujícími kompilačními nástroji.
LLVM se objevil na Univerzitě v Illinois v roce 2000 jako projekt Chrise Lattnera. Ten uvolnil verzi 1.0 v roce 2003. Lattner zaujal Apple otázkou ohledně Objective-C jazyka na mailing listu společnosti. Apple začal podporovat LLVM projekt v roce 2005 a později najmul Lattnera aby tak zaplatil jeho práci.
Minulý rok projekt uvolnil Clang, samostatnou implementaci LLVM kompilačních nástrojů zamýšlenou pro poskytnutí rychlé kompilace s nízkými nároky na paměť, dobrou diagnostiku a modulární architekturou postavenou na knihovnách a úzkou integrací s IDE jako je Xcode a vše pod BSD licencí.
Kromě čistého LLVM Clang projektu, který je používá vývojovou verzi parseru pro Objective C/C/C++, Apple začal pracovat na integraci komponent LLVM do existujícího GCC postavené na Lattnerově návrhu integrace LLVM a GCC. To mělo za výsledek hybridní systém, který využívá dospělých komponent GCC, jako front end parser a přidává nejhodnotnější komponenty LLVM, včetně moderních optimalizačních funkcí.
Tento projekt nazvaný LLVM-GCC, vkládá optimizer a code generator z LLVM do GCC, poskytuje tak moderní metody pro "agresivní smyčky, standardní skalární, interprocedurální optimalizace a analýzy" chybějící ve standardních GCC komponentech.
LLVM-GCC má být velmi kompatibilní s GCC, takže vývojáři, kteří se přesunou na nový kompilátor nemusí měnit větší část své práce. Zdroje tvrdí, že LLVM-GCC kompiluje kód, který pracuje o 33% rychleji, než ten ze standardního GCC.
Apple používá LLVM v OpenGL sadě v Leopardovi, kde je schopen emulovat OpenGL hardware na Macích, které postrádají hardware nutný ke sputěštění příslušného kódu. Kód je místo toho proveden na CPU.
Apple používá LLVM při vývoji iPhone, protože jeho modulární architura přidává podporu pro další hardware jako je např. ARM, nyní podporované v LLVM 2.0, díky práci INdT od Nokie.
LLVM hraje klíčovou roli ve strategii Apple pro multicore a multiprocesorový paralelismus. CPU se blíží k fyzikálním limitům, který znemožní čipů zvyšování rychlosti zvednutím frekvence. Plány Intelu indikují, že budoucnost leží u přidávání dalších jader. Apple již prodává 8-mi jaderné Macy v high end řadě, Intel plánuje počítat jádra v procesorech v dvoumístných číslech.
Využití těchto jader není jednoduché. Zatímco klasický Mac OS a Windows byly rychlejší jednoduše díky desetiletí, kdy se zvedala frekvence procesoru, další vylepšování bude možné jen díky velmi efektivnímu kódu, který zde využije výhody více jader.
Existující metody práce s vlákny mají problémy v synchronizaci mezi jádry, což způsobuje neefektivní využití moderního hardware. Knihovny jako OpenCL a Grand Central Dispatch učiní Snow Leoparda lépe vybaveného pro správu paralelismu mezi procesory a posune optimalizovaný kód do GPU jader, jak bylo popsáno na WWDC. Nicméně aby OS efektivně spravoval paralelní úlohy, kód musí být explicitně optimalizován pro paralelismus kompilátorem.
LLVM se tak stává klíčovým nástrojem v přípravě kódu pro velmi výkonné systémy. Apple, jako největší zastánce LLVM projektu pracuje na protlačení této technologie mezi vývojáře v univerzitách a průmyslovými partnery, včetně výrobce superpočítačů Cray. Apple také přispívá k projektu GCC, vylepšuje jeho výkon a přidává funkce.
Protože oba projekty jsou open source, je jednoduché zjistit, jaké jsou další plány. Vylepšování odlaďování kódu, rychlost kompilátoru a rychlost výsledného kódu, bezpečnostní funkce zaměření na zastavení chyb buffer overflow a optimalizace specifické pro procesor, které dohromady vytváří lepší kód.
To znamená, že aplikace budou rychlejší a vývojáři se budou moci zaměřit na svůj produkt, místo aby trávili čas se zastaralou technologií kompilátoru.
Pro Apple, investujícího vlastní expertízu to znamená, že bude moci vylepšit vlastní software pro specializované procesory na kterých poběží, jako je například mobilní SoC.