Gradirei il vostro commento alla seguente domanda: Un interprete può essere più efficiente di un compilatore quando : 1) Il programma esegue cicli; 2) Si vuole programmare a oggetti; 3) Si vuole favorire la facilità di sviluppo; 4) Il programma viene eseguito molte volte; 5) Il programma viene richiamato più volte da altre applicazioni. In sintesi vorrei sapere il ruolo che viene svolto da Interprete e Compilatore.

Il modo di operare di un compilatore è il seguente: l’utente crea il
programma chiamato codice sorgente, il compilatore lo traduce nel linguaggio
macchina fatto di 0 e 1 creando il codice oggetto, il linker aggiunge al
codice oggetto eventuali sottoprogrammi già preparati in librerie, infine il
loader sistema i riferimenti agli indirizzi di memoria da usare e crea il
codice eseguibile dal computer.

Il risultato di un compilatore è un codice eseguibile direttamente perché
non richiede l’uso di ulteriori programmi per essere eseguito.
I vantaggi dell’uso di un compilatore
sono: minore occupazione di memoria, tempo di esecuzione molto veloce. Lo
svantaggio è che il codice eseguibile non può essere modificato e, in caso
di modifica del codice sorgente, occorre rifare la compilazione. Inoltre
tale codice è eseguibile solo su computer identici a quello per cui è stato
compilato.

L’interprete ha il seguente modo di operare: prende una frase del programma,
la traduce e la esegue subito, prende la frase successiva, la traduce e la
esegue subito, e così via, mischiando le fasi di traduzione con le fasi di
esecuzione, che nel compilatore sono invece ben separate.
Quindi per eseguire un programma scritto in un linguaggio interpretato è
necessario ogni volta l’uso dell’interprete. Offre il vantaggio di poter
provare
subito le modifiche al programma perché dopo ogni modifica non occorre
ricompilare tutto il programma; ha gli
svantaggi di richiedere più tempo per la esecuzione ed una maggiore
occupazione di memoria per essere presente insieme al programma ed ai dati.
I linguaggi Basic, Java, Perl richiedono un interprete; linguaggi come il C
e il Pascal richiedono un compilatore.

Questa divisione classica non è così forte nei linguaggi moderni come il
Java, in cui il programma viene inizialmente compilato in un pseudocodice,
una forma di codice intermedio, che viene poi interpretato per poter essere
eseguito. In questo modo ha il grande vantaggio che lo stesso pseudocodice
può essere interpretato ed eseguito su computer con sistemi operativi e
CPU diversi rispetto al computer su cui è stato sviluppato.
Infatti viene largamente usato in Internet: ogni browser ha un proprio
interprete Java creato secondo l’architettura del computer su cui è
installato, e viene trasmesso solo lo pseudocodice che è di piccole
dimensioni, riducendo la velocità di trasmissione.
In conclusione, un compilatore è più efficiente nei casi 1,4,5 esposti nella
domanda, mentre un interprete è più efficiente nel caso 3. Entrambi
consentono la programmazione ad oggetti.