Compilació just-in-time
Tipus | compilation mode (en) |
---|---|
Característiques tècniques | |
Plataforma | Multiplataforma |
Més informació | |
Stack Exchange | Etiqueta |
| |
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,0 1,1 Aycock, 2003.
- ↑ 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,0 3,1 Aycock, 2003, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
- ↑ Thompson, 1968.
- ↑ Aycock, 2003, 2. JIT Compilation Techniques, 2.2 LC², p. 98–99.