Che cosa è un Interprete?

Un interprete, è un programma in grado di eseguire altri programmi a partire direttamente dal relativo codice sorgente.

Ha lo scopo di eseguire un programma in un linguaggio di alto livello, senza la previa compilazione dello stesso (codice oggetto) cioè di eseguire le istruzioni nel linguaggio usato, traducendole di volta in volta in istruzioni in linguaggio macchina.

Caratteristiche

A differenza di un interprete, un compilatore non esegue il programma che riceve in ingresso, ma lo traduce in linguaggio macchina (memorizzando su file il codice oggetto pronto per l'esecuzione diretta da parte del processore).

Per qualunque linguaggio di programmazione si può scrivere sia un interprete che un compilatore, pertanto le espressioni linguaggio interpretato e linguaggio compilato sono scorrette, essendo interpretazione e compilazione concetti afferenti alla implementazione di un linguaggio e non al linguaggio in sé.

Script engine

Lo "scripting engine" è un motore che interpreta liste di comandi, dette script, formulati con una sintassi determinata, detta linguaggio di scripting.

Solitamente troviamo uno scripting engine dove si ha la necessità di fornire una grande flessibilità per aspetti specifici, senza eccessive esigenze di velocità. La semplicità e l'immediatezza sono quindi requisiti fondamentali. Ciò colloca gli scripting engine ad un alto livello di astrazione.

Pro e contro

L'approccio interpretato comporta una minore efficienza a run-time; un programma interpretato, in esecuzione, richiede più memoria ed è meno veloce, a causa dell'overhead introdotto dall'interprete stesso. Durante l'esecuzione, l'interprete deve infatti analizzare le istruzioni a partire dal livello sintattico, identificare le azioni da eseguire (eventualmente trasformando i nomi simbolici delle variabili coinvolte nei corrispondenti indirizzi di memoria), ed eseguirle; mentre le istruzioni del codice compilato, già in linguaggio macchina, vengono caricate e istantaneamente eseguite dal processore.

In compenso, l'interpretazione di un programma può essere più rapida del ciclo compilazione/esecuzione. Questa differenza può costituire un vantaggio durante lo sviluppo, specialmente se questo viene condotto con tecniche di fast prototyping, o durante il debugging. Inoltre, la maggior parte degli interpreti consentono all'utente di agire sul programma in esecuzione sospendendolo, ispezionando o modificando i contenuti delle sue variabili, e così via, in modo spesso più flessibile e potente di quanto si possa ottenere, per il codice compilato, da un debugger.

Approcci ibridi

Esistono invece numerosi approcci ibridi fra linguaggi completamente interpretati e completamente compilati. Alcune versioni di Lisp consentono entrambi gli approcci, e consentono addirittura l'esecuzione di programmi parzialmente interpretati e parzialmente compilati, cosicché, per esempio, un nuovo sottoprogramma possa essere provato in forma interpretata e, una volta terminato il debugging, essere compilato per migliorarne le prestazioni.

Molti interpreti non eseguono direttamente il codice sorgente, ma lo convertono preventivamente in una forma interna più compatta, per esempio in un albero sintattico astratto. Ancora diverso è l'approccio di Emacs Lisp e Java, in cui viene impiegato un compilatore che trasforma il codice sorgente in un formato intermedio detto (per entrambi i linguaggi !) bytecode, abbastanza vicino al linguaggio macchina (e quindi con un costo di interpretazione moderato), ma eseguito da un interprete e non direttamente dal processore (e quindi portabile).

Una tecnica che ha destato notevole interesse negli ultimi anni (ed è applicata dalla maggior parte delle attuali implementazioni di Java e dai linguaggi della famiglia DOTNET di Microsoft) prende il nome di compilazione "just in time" o JIT. Questa tecnica può essere considerata come una ottimizzazione dell'interpretazione, in cui l'interprete compila durante l'esecuzione i frammenti di codice che vengono eseguiti con maggiore frequenza, per ridurre il costo delle loro successive esecuzioni.

RITORNO

  • 0 Utenti hanno trovato utile questa risposta
Hai trovato utile questa risposta?

Articoli Correlati

Che cosa è un dominio Internet?

A domain name is an identification string that defines a realm of administrative autonomy,...

Che cosa è un social media?

Social media, in italiano media sociali , è un termine generico che indica tecnologie e...

Che cos'è il DNS?

Il sistema dei nomi di dominio (in inglese: Domain Name System, DNS), è un sistema utilizzato...

Qual è la nuvola informatica?

Con il termine inglese cloud computing (in italiano nuvola informatica) si indica un paradigma...

Qual è il protocollo Internet IPv6?

IPv6 è la versione dell'Internet Protocol designata come successore dell'IPv4. Tale protocollo...

Powered by WHMCompleteSolution