Interprete (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
LiveRC : Annullate le modifiche di 37.159.170.50 (discussione), riportata alla versione precedente di Tino
Nessun oggetto della modifica
Riga 1:
{{F|programmazione|ottobre 2012}}
InUn '''interprete''', in [[informatica]] e nella [[Programmazione (informatica)|programmazione]], un '''interprete''' è un [[programma (informatica)|programma]] in grado di eseguire altri programmi a partire direttamente dal relativo [[codice sorgente]]. Un interprete ha lo scopo di eseguire un programma in un [[linguaggio di programmazione ad alto livello|linguaggio di alto livello]], senza la previa [[compilazione]] dello stesso ([[codice oggetto]]) cioè di eseguire le [[istruzione (informatica)|istruzioni]] nel linguaggio usato, traducendole di volta in volta in istruzioni in [[linguaggio macchina]].
 
Ha lo scopo di eseguire un programma in un [[linguaggio di programmazione ad alto livello|linguaggio di alto livello]], senza la previa [[compilazione]] dello stesso ([[codice oggetto]]) cioè di eseguire le [[istruzione (informatica)|istruzioni]] nel linguaggio usato, traducendole di volta in volta in istruzioni in [[linguaggio macchina]].
==Linguaggi interpretati==
 
== 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]]).
 
Riga 14 ⟶ 15:
 
==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 [[istruzione|istruzioni]] a partire dal livello [[sintassi|sintattico]], identificare le ''azioni'' da eseguire (eventualmente trasformando i [[nome simbolico|nomi simbolici]] delle [[variabile (informatica)|variabili]] coinvolte nei corrispondenti [[indirizzo di memoria|indirizzi di memoria]]), ed eseguirle; mentre le istruzioni del codice compilato, già in linguaggio macchina, vengono caricate e istantaneamente eseguite dal [[processore]].
 
Riga 20:
 
==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 [[subroutine|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 (linguaggio)|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 [[portabilità|portabile]]).