Ahead-of-time kompilace

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

Některé programovací jazyky s tzv. managed code běhu, který může být kompilován do mezijazyku, 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

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

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

    Související články

    This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.