Vés al contingut

Compilació just-in-time

De la Viquipèdia, l'enciclopèdia lliure
compilació just-in-time

Tipuscompilation mode (en) Tradueix Modifica el valor a Wikidata
Característiques tècniques
PlataformaMultiplataforma
Més informació
Stack ExchangeEtiqueta Modifica el valor a Wikidata

En informàtica, la compilació just-in-time (amb acrònim anglès JIT) (també traducció dinàmica o compilacions en temps d'execució) és una manera d'executar codi informàtic que implica la compilació durant l'execució d'un programa (en temps d'execució) més que abans de l'execució.[1] Això pot consistir en la traducció del codi font, però més comunament és la traducció de bytecode a codi màquina, que després s'executa directament. Un sistema que implementa un compilador JIT normalment analitza contínuament el codi que s'està executant i identifica parts del codi on l'acceleració obtinguda amb la compilació o la recompilació superaria la sobrecàrrega de compilar aquest codi.

La compilació JIT és una combinació dels dos enfocaments tradicionals de la traducció al codi màquina — compilació anticipada (AOT) i interpretació — i combina alguns avantatges i inconvenients d'ambdós.[1] Aproximadament, la compilació JIT combina la velocitat del codi compilat amb la flexibilitat d'interpretació, amb la sobrecàrrega d'un intèrpret i la sobrecàrrega addicional de compilar i enllaçar (no només interpretar). La compilació JIT és una forma de compilació dinàmica i permet l'optimització adaptativa, com ara la recompilació dinàmica i les acceleracions específiques de la microarquitectura. [2] La interpretació i la compilació JIT són especialment adequades per a llenguatges de programació dinàmics, ja que el sistema d'execució pot gestionar els tipus de dades d'enllaç tardà i fer complir les garanties de seguretat.

El primer compilador JIT publicat s'atribueix generalment al treball sobre LISP de John McCarthy l'any 1960.[3] En el seu article fonamental Funcions recursives d'expressions simbòliques i el seu càlcul per màquina, Part I, esmenta les funcions que es tradueixen durant el temps d'execució, estalviant així la necessitat de desar la sortida del compilador a les targetes perforades (tot i que això seria conegut amb més precisió com a "Sistema de compilació i marxa"). Un altre dels primers exemples va ser Ken Thompson, que el 1968 va donar una de les primeres aplicacions d'expressions regulars, aquí per a la concordança de patrons a l'editor de text QED.[4] Per a la velocitat, Thompson va implementar la concordança d'expressions regulars mitjançant JITing amb el codi IBM 7094 al Compatible Time-Sharing System.[3] Una tècnica influent per derivar codi compilat a partir de la interpretació va ser pionera per James G. Mitchell el 1970, que va implementar per al llenguatge experimental LC².[5]

Referències

[modifica]
  1. 1,0 1,1 Aycock, 2003.
  2. Ahead-of-Time compilers can target specific microarchitectures as well, but the difference between AOT and JIT in that matter is one of portability. A JIT can render code tailored to the currently running CPU at runtime, whereas an AOT, in lieu of optimizing for a generalized subset of uarches, must know the target CPU in advance: such code may not only be not performant on other CPU types but may be outright unstable.
  3. 3,0 3,1 Aycock, 2003, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
  4. Thompson, 1968.
  5. Aycock, 2003, 2. JIT Compilation Techniques, 2.2 LC², p. 98–99.