Come altri hanno detto, compilati e interpretati sono specifici per un'implementazione di un linguaggio di programmazione; essi sono non inerenti alla lingua. Ad esempio, ci sono interpreti C.
Tuttavia, possiamo (e in pratica lo facciamo) classificare i linguaggi di programmazione in base alla sua implementazione più comune (a volte canonica). Ad esempio, diciamo che C è compilato.
Innanzitutto, dobbiamo definire senza ambiguità interpreti e compilatori:
Un interprete per la lingua X è un programma (o una macchina, o solo qualche tipo di meccanismo in generale) che esegue qualsiasi programma p scritto in linguaggio X tale che esegue gli effetti e valuta i risultati come prescritto dalle specifiche di X .
Un compilatore da X a Y è un programma (o una macchina, o solo un qualche tipo di meccanismo in generale) che traduce qualsiasi programma p da un linguaggio X in un programma semanticamente equivalente p ' in un linguaggio Y in modo tale che interpretando p ' con un interprete per Y produrrà gli stessi risultati e hanno gli stessi effetti come interpretare p con un interprete per X .
Si noti che dal punto di vista del programmatore, le CPU sono interpreti macchina per il rispettivo linguaggio macchina nativo.
Ora, possiamo fare una classificazione provvisoria dei linguaggi di programmazione in 3 categorie a seconda della sua implementazione più comune:
- Linguaggi hard compilati: quando i programmi sono compilati interamente in linguaggio macchina. L'unico interprete utilizzato è una CPU. Esempio: di solito, per eseguire un programma in C, il codice sorgente viene compilato in linguaggio macchina, che viene quindi eseguito da una CPU.
- Linguaggi interpretati: quando non vi è alcuna compilazione di alcuna parte del programma originale in linguaggio macchina. In altre parole, non viene generato alcun nuovo codice macchina; viene eseguito solo il codice macchina esistente. Deve essere utilizzato anche un interprete diverso dalla CPU (di solito un programma) Esempio: nell'implementazione canonica di Python, il codice sorgente viene compilato prima in bytecode Python e poi quel bytecode viene eseguito da CPython, un programma interprete per bytecode Python .
- Linguaggi Soft Compiled: quando viene utilizzato un interprete diverso dalla CPU, ma anche parti del programma originale possono essere compilate in linguaggio macchina. Questo è il caso di Java, dove il codice sorgente viene compilato prima in bytecode e poi, il bytecode può essere interpretato da Java Interpreter e / o ulteriormente compilato dal compilatore JIT.
A volte, i linguaggi compilati in modo soft e hard vengono indicati semplicemente compilati, quindi si dice che C #, Java, C, C ++ siano compilati.
All'interno di questa categorizzazione, JavaScript era un linguaggio interpretato, ma è stato molti anni fa. Al giorno d'oggi, è compilato JIT nel linguaggio macchina nativo nella maggior parte delle principali implementazioni JavaScript, quindi direi che rientra nei linguaggi compilati soft.