La maggior parte dei linguaggi di programmazione si divide in due categorie: lingue interpretate e compilate.
Una lingua compilata è tradotta da un compilatore in codice macchina , la lingua che la CPU esegue direttamente passo dopo passo. Un linguaggio interpretato, d'altra parte, utilizza un intermediario, un interprete , per eseguire il codice della lingua. L'interprete è di per sé un altro programma, solitamente compilato per codice macchina.
PHP è un linguaggio interpretato. È necessario un programma separato per eseguire codice PHP, il computer non esegue direttamente il programma. Quel programma separato, l'interprete PHP, è a sua volta scritto in C.
C # è un linguaggio compilato, ma non è compilato come codice macchina. Invece, è compilato in una lingua specialistica, codice byte, da eseguire su una macchina virtuale. Java è un altro esempio di tale impostazione. Lo si può vedere come un ibrido tra la compilazione e l'interpretazione, in cui la macchina virtuale è un interprete. La macchina virtuale per C # (la CLI, o Common Language Infrastructure ) è scritta in C ++.
Altri esempi sono:
- Python: l'interprete Python compila il codice Python in bytecode Python, quindi interpreta il bytecode. L'interprete stesso è scritto in C. Da allora sono state aggiunte nuove implementazioni, inclusa una che compila python per l'esecuzione sulla stessa CLI utilizzata per C #, chiamato IronPython e uno che gira sulla macchina virtuale Java, Jython . Per completare la cerchia, c'è la versione di Python scritta in Python, PyPy .
- Ruby: Ruby è iniziato come un puro linguaggio interpretato, ma la versione più recente è passata all'utilizzo di bytecode. Anche per Ruby esiste un progetto che viene compilato alla CLI, denominato IronRuby e uno per Java VM, JRuby .