Compilator doar la timp

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă căutați alte semnificații, consultați Just in Time .

Un compilator just-in-time sau JIT permite un tip de compilare , cunoscut și sub denumirea de traducere dinamică , efectuat în timpul executării programului, mai degrabă decât anterior. Scopul final este de a combina avantajele compilației bytecode cu cele ale compilării native , crescând performanța aproape la egalitate cu compilarea directă în limbajul mașinii .

Istorie

Traducerea dinamică a fost efectuată pentru prima dată la începutul anilor 1980 într-o versiune comercială a limbajului Smalltalk cunoscut acum sub numele de VisualWorks. Astăzi, traducerea dinamică este prezentă în majoritatea implementărilor de mașini virtuale Java .

Sun Microsystems mașina virtuală Java HotSpot conține un exemplu de implementare JIT. Există de fapt două: o versiune „client” care este optimizată pentru a fi rapidă și este mai potrivită pentru aplicații care au un timp de execuție scurt; și o versiune „server” care produce cod extrem de optimizat și este concepută pentru aplicații care trebuie să dureze mult timp. Utilizatorii pot alege ce compilator dinamic să utilizeze pe baza caracteristicilor aplicației lor.

Microsoft a ales un sistem JIT pentru mediul .NET , iar procesorul Transmeta Crusoe utilizează tehnici similare la nivel hardware. Mașina virtuală Parrot pentru limbajul Perl utilizează un sistem JIT. PyPy este un compilator JIT pentru limbajul Python . În octombrie 2005, Macromedia a anunțat că, începând cu versiunea 8.5, pluginul Macromedia Flash va utiliza un compilator JIT pentru a îmbunătăți performanțele de execuție Flash.

Operațiune

Un compilator JIT se bazează pe două concepte recente în mediile de execuție: compilația de coduri bytec și compilația dinamică .

Într-un sistem de compilare a bytecodelor, cum ar fi Perl , GNU CLISP sau versiunile anterioare ale Java , codul sursă este tradus într-o reprezentare intermediară cunoscută sub numele de bytecode . Bytecode nu este codul mașinii unui anumit computer și poate fi portabil pe mai multe arhitecturi. Bytecode-ul este apoi interpretat sau executat într-o mașină virtuală.

Într-un sistem de compilare dinamic, compilatorul poate fi utilizat în timpul rulării. De exemplu, majoritatea sistemelor Lisp au o funcție de compilare cu care pot fi compilate noile funcții create în timpul execuției. Deși este avantajos în timpul unei sesiuni de depanare interactivă, compilarea dinamică este de puțin folos atunci când faza de dezvoltare a sistemului este terminată.

Într-un mediu JIT, prima fază constă în compilarea bytecode-ului, în care codul sursă este transformat într-o reprezentare intermediară portabilă și optimizabilă, numită bytecode. Bytecode-ul este apoi instalat pe sistemul țintă. Când codul este executat, compilatorul de mediu de execuție îl traduce în codul mașinii native. Traducerea în codul mașinii poate avea loc prin fișier sau funcție: funcțiile pot fi compilate numai atunci când sunt pe cale să fie executate, de unde și numele „ just-in-time ” sau „just in time”.

Compilarea just-in-time permite un compromis bun între viteza de execuție și portabilitatea codului. În faza de compilare a bytecodului se efectuează cea mai mare parte a „muncii grele”, adică toate acele operații care necesită mult timp pentru a fi efectuate, cum ar fi analiza sintactică și semantică a codului sursă și o fază inițială de optimizare; compilarea de la bytecode la codul nativ este mult mai rapidă. Compilatoarele de coduri bytecode (inclusiv sistemele JIT) sunt mai ușor de scris, deoarece cea mai mare parte a muncii a fost deja realizată de către compilatorul care a produs bytecode-ul; acest lucru face, de asemenea, programele bytecode mai ușor de transportat către noile arhitecturi.

Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT