Динамічна компіляція — процес, що використовується деякими реалізаціями мов програмування для підвищення продуктивності протягом виконання програми. Хоча техніка походить із Self, найвідомішою мовою, що використовує цю техніку, є Java. Оскільки машинний код, який видає динамічний компілятор, конструюється й оптимізується під час виконання програми, то використання динамічної компіляції дозволяє оптимізації ефективності, недоступні статично скомпільованим програмам (тобто скомпільованим так званим «пакетним компілятором», як написано нижче), за винятком дублювання коду чи метапрограмування.
У [ru], що використовують динамічну компіляцію, як правило, програми працюють повільно перші кілька хвилин, а після здійснення більшості компіляцій і перекомпіляцій — швидше. Через це початкове відставання продуктивності, динамічна компіляція є небажаною в певних випадках. У більшості реалізацій динамічної компіляції, деякі оптимізації, що можуть бути зроблені під час початкової [en], затримуються до подальшої компіляції під [en], спричинюючи подальші непотрібні уповільнення. JIT-компіляція є формою динамічної компіляції.
Покрокова компіляція
Близько пов'язана техніка — покрокова компіляція. використовується у [en], [en], Forth, деяких версіях мови Lisp, зокрема [en] і щонайменше одній версії мови програмування ML ([en] ML).
Це вимагає від компілятора мови програмування бути частиною системи часу виконання. Як наслідок, початковий код може бути прочитаний у будь-який час із терміналу, файлу чи, можливо, структури даних, сконструйованою запущеною програмою, та транслюється у блок або функцію машинного коду (яка може замінити однойменну попередню функцію), яка потім негайно доступна для використання програмою. Через потребу для швидкості компіляції протягом інтерактивної розробки та тестування, скомпільований код, скоріше за все, не настільки сильно оптимізований за код, вироблений стандартним «пакетним компілятором», який читає початковий код і виробляє об'єктні файли, які в подальшому можуть компонуватися та запускатися. Проте, покроково скомпільовані програми, як правило, працюватимуть набагато швидше за інтерпретовану версію тієї ж програми. Таким чином, покрокова компіляція забезпечує суміш переваг інтерпретованих і компільованих мов. Задля портативності покроковому компілятору зазвичай бажано працювати у два етапи: спочатку компілюючи в деяку проміжну платформонезалежну мову, а потім компілюючи з неї у машинний код для хост-машини. У цьому випадку портування вимагає лише зміни «заднього» компілятора. На відміну від динамічної компіляції, як визначено вище, покрокова компіляція не передбачає подальших оптимізацій після першого запуску програми.
Див. також
- Процесори Transmeta динамічно компілюють код x86 у код VLIW.
- [en]
- JIT-компіляція
Посилання
- Architecture Emulation through Dynamic Compilation [ 26 вересня 2011 у Wayback Machine.]
- Article «» by David B. Scofield and Eric Bergman-Terrell
- Article «High-performance XML: Dynamic XPath expressions compilation [ 2 березня 2014 у Wayback Machine.]» by Daniel Cazzulino
- Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney, A Survey of Adaptive Optimization in Virtual Machines [ 24 березня 2012 у Wayback Machine.], Proceedings of the IEEE, 92(2), February 2005, Pages 449—466.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
Dinamichna kompilyaciya proces sho vikoristovuyetsya deyakimi realizaciyami mov programuvannya dlya pidvishennya produktivnosti protyagom vikonannya programi Hocha tehnika pohodit iz Self najvidomishoyu movoyu sho vikoristovuye cyu tehniku ye Java Oskilki mashinnij kod yakij vidaye dinamichnij kompilyator konstruyuyetsya j optimizuyetsya pid chas vikonannya programi to vikoristannya dinamichnoyi kompilyaciyi dozvolyaye optimizaciyi efektivnosti nedostupni statichno skompilovanim programam tobto skompilovanim tak zvanim paketnim kompilyatorom yak napisano nizhche za vinyatkom dublyuvannya kodu chi metaprogramuvannya U ru sho vikoristovuyut dinamichnu kompilyaciyu yak pravilo programi pracyuyut povilno pershi kilka hvilin a pislya zdijsnennya bilshosti kompilyacij i perekompilyacij shvidshe Cherez ce pochatkove vidstavannya produktivnosti dinamichna kompilyaciya ye nebazhanoyu v pevnih vipadkah U bilshosti realizacij dinamichnoyi kompilyaciyi deyaki optimizaciyi sho mozhut buti zrobleni pid chas pochatkovoyi en zatrimuyutsya do podalshoyi kompilyaciyi pid en sprichinyuyuchi podalshi nepotribni upovilnennya JIT kompilyaciya ye formoyu dinamichnoyi kompilyaciyi Pokrokova kompilyaciyaBlizko pov yazana tehnika pokrokova kompilyaciya vikoristovuyetsya u en en Forth deyakih versiyah movi Lisp zokrema en i shonajmenshe odnij versiyi movi programuvannya ML en ML Ce vimagaye vid kompilyatora movi programuvannya buti chastinoyu sistemi chasu vikonannya Yak naslidok pochatkovij kod mozhe buti prochitanij u bud yakij chas iz terminalu fajlu chi mozhlivo strukturi danih skonstrujovanoyu zapushenoyu programoyu ta translyuyetsya u blok abo funkciyu mashinnogo kodu yaka mozhe zaminiti odnojmennu poperednyu funkciyu yaka potim negajno dostupna dlya vikoristannya programoyu Cherez potrebu dlya shvidkosti kompilyaciyi protyagom interaktivnoyi rozrobki ta testuvannya skompilovanij kod skorishe za vse ne nastilki silno optimizovanij za kod viroblenij standartnim paketnim kompilyatorom yakij chitaye pochatkovij kod i viroblyaye ob yektni fajli yaki v podalshomu mozhut komponuvatisya ta zapuskatisya Prote pokrokovo skompilovani programi yak pravilo pracyuvatimut nabagato shvidshe za interpretovanu versiyu tiyeyi zh programi Takim chinom pokrokova kompilyaciya zabezpechuye sumish perevag interpretovanih i kompilovanih mov Zadlya portativnosti pokrokovomu kompilyatoru zazvichaj bazhano pracyuvati u dva etapi spochatku kompilyuyuchi v deyaku promizhnu platformonezalezhnu movu a potim kompilyuyuchi z neyi u mashinnij kod dlya host mashini U comu vipadku portuvannya vimagaye lishe zmini zadnogo kompilyatora Na vidminu vid dinamichnoyi kompilyaciyi yak viznacheno vishe pokrokova kompilyaciya ne peredbachaye podalshih optimizacij pislya pershogo zapusku programi Div takozhProcesori Transmeta dinamichno kompilyuyut kod x86 u kod VLIW en JIT kompilyaciyaPosilannyaArchitecture Emulation through Dynamic Compilation 26 veresnya 2011 u Wayback Machine Article by David B Scofield and Eric Bergman Terrell Article High performance XML Dynamic XPath expressions compilation 2 bereznya 2014 u Wayback Machine by Daniel Cazzulino Matthew R Arnold Stephen Fink David P Grove Michael Hind and Peter F Sweeney A Survey of Adaptive Optimization in Virtual Machines 24 bereznya 2012 u Wayback Machine Proceedings of the IEEE 92 2 February 2005 Pages 449 466