Dynamická kompilace - Dynamic compilation
Provádění programu |
---|
Obecné pojmy |
Druhy kódu |
Strategie kompilace |
Pozoruhodné doby běhu |
Pozoruhodné překladače a řetězce nástrojů |
Dynamická kompilace je proces používaný některými programovací jazyk implementace k získání výkonu během provádění programu. Ačkoli technika vznikla v Já,[Citace je zapotřebí ] nejznámější jazyk, který používá tuto techniku, je Jáva. Vzhledem k tomu, že strojový kód vyzařovaný dynamickým kompilátorem je konstruován a optimalizován za běhu programu, umožňuje použití dynamické kompilace optimalizace pro efektivitu, která není k dispozici kompilovaným programům kromě prostřednictvím duplikace kódu nebo metaprogramování.
Runtime prostředí pomocí dynamické kompilace mají programy obvykle spuštěny pomalu prvních pár minut a poté je většina kompilace a rekompilace hotová a běží rychle. Kvůli tomuto počátečnímu zpoždění výkonu je dynamická kompilace v určitých případech nežádoucí. Ve většině implementací dynamické kompilace některé optimalizace, které lze provést na začátku čas kompilace jsou odloženy až do další kompilace v run-time, což způsobuje další zbytečná zpomalení. Just-in-time kompilace je forma dynamické kompilace.
Inkrementální kompilace
Úzce související technika je přírůstková kompilace. An přírůstkový překladač se používá v POP-2, POP-11, Forth, některé verze Lisp, např. Maclisp a alespoň jedna verze ML programovací jazyk (Poplog ML). To vyžaduje překladač aby byl programovací jazyk součástí runtime systému. V důsledku toho lze zdrojový kód kdykoli načíst z terminálu, ze souboru nebo případně z datové struktury vytvořené spuštěným programem a přeložit jej do bloku nebo funkce strojového kódu (která může nahradit předchozí funkci se stejným názvem), který je poté okamžitě k dispozici pro použití programem. Z důvodu potřeby rychlosti kompilace během interaktivního vývoje a testování nebude zkompilovaný kód pravděpodobně tak silně optimalizován jako kód vytvořený standardním „dávkovým kompilátorem“, který čte ve zdrojovém kódu a vytváří soubory objektů, které lze následně propojit a běž. Přírůstkově kompilovaný program však bude běžet mnohem rychleji než interpretovaná verze stejného programu. Inkrementální kompilace tak poskytuje kombinaci výhod interpretovaných a kompilovaných jazyků. Aby se usnadnila přenositelnost, je obecně žádoucí, aby inkrementální kompilátor pracoval ve dvou fázích, a to nejprve kompilace do nějakého zprostředkujícího jazyka nezávislého na platformě a poté kompilace z toho do strojového kódu pro hostitelský stroj. V tomto případě portování vyžaduje pouze změnu kompilátoru 'back end'. Na rozdíl od dynamické kompilace, jak je definována výše, přírůstková kompilace nezahrnuje další optimalizace po prvním spuštění programu.
Viz také
- Transmeta procesory dynamicky kompilovat x86 kód do VLIW kód.
- Dynamická rekompilace
- Just-in-time kompilace
externí odkazy
- Projekt dynamické kompilace UW
- Emulace architektury prostřednictvím dynamické kompilace
- SCIRun
- Článek "Dynamická kompilace, reflexe a přizpůsobitelné aplikace "od David B. Scofield a Eric Bergman-Terrell
- Článek "Vysoce výkonný XML: kompilace výrazů XPath XPath "od Daniel Cazzulino
- Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, a Peter F. Sweeney, Průzkum adaptivní optimalizace ve virtuálních strojích, Proceedings of the IEEE, 92 (2), February 2005, Pages 449-466.