Un compilator este un program software care transformă codul de programare al computerului scris de un programator uman în cod binar (cod de mașină) care poate fi înțeles și executat de un anumit procesor. Actul transformării codului sursă în codul mașinii se numește „compilare”. Când tot codul este transformat la un moment dat înainte de a ajunge pe platformele care îl rulează, procesul este numit compilare anticipată (AOT).
Multe limbaje de programare cunoscute necesită un compilator, inclusiv:
Înainte de Java și C #, toate programele de calculator au fost compilate sau interpretate.
Codul interpretat execută instrucțiuni dintr-un program fără să le compileze în limbajul mașinii. Codul interpretat analizează direct codul sursă, este asociat cu o mașină virtuală care traduce codul pentru mașină în momentul executării sau profită de codul precompilat. Javascript este de obicei interpretat.
Codul compilat rulează mai repede decât codul interpretat, deoarece nu trebuie să facă nicio lucrare în momentul în care are loc acțiunea. Lucrarea este deja finalizată.
Java și C # folosesc compilatoare exacte în timp. Compilatoarele în timp sunt o combinație de compilatori AOT și interpreți. După ce este scris un program Java, compilatorul JIT transformă codul în bytecode și nu în cod care conține instrucțiuni pentru procesorul unei platforme hardware specifice. Bytecode este independent de platformă și poate fi trimis și rulat pe orice platformă care acceptă Java. Într-un anumit sens, programul este compilat într-un proces în două etape.
În mod similar, C # folosește un compilator JIT, care face parte din Common Language Runtime, care gestionează execuția tuturor aplicațiilor .NET. Fiecare platformă țintă are un compilator JIT. Atâta timp cât conversia limbii bytecode intermediare poate fi înțeleasă de către platformă, programul rulează.
Compilarea înainte de timp (AOT) oferă timp de pornire mai rapid, în special atunci când o mare parte din cod se execută la pornire. Cu toate acestea, necesită mai multă memorie și mai mult spațiu pe disc. Compilarea JOT trebuie să vizeze cel mai puțin capabil de toate platformele de execuție posibile.
Compilația JIT (time-in-time) profilează platforma țintă în timp ce rulează și re-compilează în zbor pentru a oferi performanțe îmbunătățite. JIT generează cod îmbunătățit, deoarece vizează platforma curentă, deși durează de obicei mai mult timp pentru a rula decât codul AOT compilat.