Ahead-of-time kompilace

Z Wikipedie, otevřené encyklopedie

V počítačové vědě je ahead-of-time (AOT) kompilace označena jako kompilační úkon, ve kterém je kód ve vyšších programovacích jazycích jako C nebo C++, či mezijazyk jako Java bytecode nebo .NET Framework (CIL), převeden do nativního strojového kódu, aby výsledný binární soubor mohl být spuštěn nativně.

AOT vytváří strojově optimalizovaný kód, stejně jako standardní nativní kompilátor. Rozdíl spočívá v tom, že AOT transformuje byte kód existujícího virtuálního stroje (VM) do strojového kódu.

Zkrácení běhu režie[editovat | editovat zdroj]

Některé programovací jazyky s tzv. managed code běhu, který může být kompilován do mezijazyka, používají just-in-time kompilaci (JIT). Stručně řečeno, kompiluje mezikód do strojového kódu pro nativní běh, zatímco je mezikód spuštěn, což může snížit výkon aplikace. Ahead-of-time kompilace eliminuje nutnost tohoto kroku tím, že nastává před spuštěním, nežli při spuštění.

Ahead-of-time kompilování pro psaní v dynamických jazycích do nativního strojového kódu nebo statického VM byte kódu je možné jen v omezeném počtu případů. Například, High Performance Erlang Project (HiPE) AOT kompilátor pro jazyk Erlang to umožňuje, jelikož má pokročilé statické zapisovací rekonstrukční techniky.

Ve většině případech je s plně AOT kompilovanými programy a knihovnami možné ušetřit použitelný zlomek běhového prostředí, jako úspora místa na disku, paměti, životnosti baterie, a počtu spuštění. Na základě toho, může být AOT vhodná pro vložená nebo mobilní zařízení.

Srovnání s JIT[editovat | editovat zdroj]

AOT kompilátory jsou schopny vykonávat komplexní a pokročilé optimalizace kódů, které by v případě JIT kompilace byly příliš nákladné. Oproti tomu, AOT není schopná provést některé optimalizace v JIT, jako např. tzv. profilově řízené optimalizace (PGO), pseudo-konstantní propagace nebo nepřímo-virtuální řádkování funkcí.

Mimo jiné, JIT kompilátory mohou spekulativně optimalizovat tzv. hot code, na kterém vytváří předpoklady. Generovaný kód může být deoptimalizován, pokud předpoklady vyvrátí. Takové operace zpomalují výkon běžícího softwaru, dokud není kód znovu optimalizován adaptivní optimalizací. AOT kompilátor takové předpoklady vytvářet neumí a musí tak vyvozovat tolik informací, jak je to jen možné, během procesu kompilace. Musí se uchýlit k méně specializovanému kódu, protože nemůže vědět, které typy projdou přes metodu. Takové problémy mohou být zmírněny pomocí PGO. Ale i v tomto případě vygenerovaný kód nemůže být adaptován dynamicky do měnícího se běhového profilu, jak to umí JIT kompilátor.

Reference[editovat | editovat zdroj]

V tomto článku byl použit překlad textu z článku ahead-of-time compilation na anglické Wikipedii.


Související články[editovat | editovat zdroj]