Qualsiasi programma è costituito da un insieme di istruzioni, che si tratti di sommare due numeri o di inviare richieste di dati su internet. Compilatori e interpreti partono da un codice leggibile da una persona e lo convertono in una forma adatta ad essere letta da un computer.

Nel linguaggio compilato, la macchina svolge direttamente l'operazione di traduzione. Nel linguaggio interpretato, la fonte del codice non viene tradotta direttamente dalla macchina. In questo caso è un programma diverso, detto interprete, che legge ed esegue il codice.

Ok… ma cosa vuol dire realmente?

Immagina di voler preparare dell'hummus seguendo una ricetta scritta in greco antico. Ci sono due modi in cui puoi farlo, non conoscendo il greco antico.

Il primo è che qualcuno traduca la ricetta in italiano per te. Poi sarai in grado di leggere la ricetta in versione italiana (tu e chiunque altro conosca l'italiano) e preparare l'hummus. Pensa a questa ricetta tradotta come alla versione compilata.

Il secondo modo è che tu abbia un amico che conosce il greco antico. Quando sei pronto a preparare l'hummus, il tuo amico può sedersi accanto a te e tradurre la ricetta durante la preparazione del piatto. In questo caso, la versione della ricetta è interpretata e il tuo amico ne è l'interprete.  

Linguaggi compilati

I linguaggi compilati vengono convertiti direttamente nel codice macchina che viene eseguito dal processore. Di conseguenza, tendono ad essere più veloci ed efficienti da eseguire rispetto ai linguaggi interpretati. Inoltre, permettono allo sviluppatore di avere un maggior controllo sugli aspetti legati all'hardware, come la gestione della memoria e l'uso della CPU.

I linguaggi compilati necessitano di una fase di "costruzione"- all'inizio devono essere compilati manualmente. Occorre "ricostruire" il programma ogni volta che lo si vuole modificare. Nel nostro esempio dell'hummus, l'intera traduzione viene fatta prima che la ricetta arrivi a te. Se l'autore originale volesse usare un tipo diverso di olio di oliva, l'intera ricetta dovrebbe essere ritradotta interamente e mandata di nuovo a te.

Alcuni esempi di linguaggi compilati sono C, C++, Erlang, Haskell, Rust, and Go.

Linguaggi interpretati

Gli interpreti funzionano attraverso un programma che esegue ogni comando riga per riga. In questo caso, se l'autore decidesse di voler utilizzare un tipo diverso di olio di oliva, potrebbe cancellarlo e aggiungerne uno nuovo. Il tuo amico traduttore poi, ti riferirebbe del cambio avvenuto.

I linguaggi interpretati erano notevolmente più lenti dei linguaggi compilati. Adesso, con lo sviluppo della compilazione just-in-time, il divario sta diminuendo.

Esempi di linguaggi interpretati sono PHP, Ruby, Python, e JavaScript.

Un piccolo avvertimento

La maggior parte dei linguaggi può essere attuata sia in forma compilata che interpretata - il linguaggio in sé non deve essere necessariamente compilato o interpretato. In ogni caso, per semplicità, vengono generalmente identificati così.

Python, per esempio, può essere eseguito sia come linguaggio di programmazione compilato che  interpretato in modo interattivo. Al contrario invece, la maggioranza dei strumenti da riga di comando, CLI, e shell possono essere classificati teoricamente come linguaggi interpretati.

Vantaggi e svantaggi

Vantaggi dei linguaggi compilati

I programmi che vengono compilati nel codice macchina tendono a essere più veloci del quelli interpretati. Questo accade perché il processo di traduzione del codice durante l'esecuzione può sovraccaricare il sistema, rallentando il programma.

Svantaggi dei linguaggi compilati

Gli svantaggi più rilevanti sono:

  • Più tempo necessario per completare la fase di compilazione prima di poter fare test
  • Dipendenza dalla piattaforma del codice binario generato

Vantaggi dei linguaggi interpretati

I linguaggi interpretati tendono ad essere più flessibili, offrendo spesso caratteristiche come la tipizzazione dinamica e programmi con minori dimensioni. Inoltre, dato che sono gli interpreti ad eseguire il codice sorgente, il codice stesso risulta una piattaforma indipendente.

Svantaggi dei linguaggi interpretati

Lo svantaggio principale è la velocità di esecuzione tipicamente ridotta rispetto a quella dei linguaggio compilati.