interpreti
Programmi che eseguono la traduzione delle istruzioni dal linguaggio di alto livello al linguaggio macchina durante la fase di elaborazione. A differenza dei compilatori, che traducono l’intero programma prima di passare alla fase di esecuzione, gli interpreti lo traducono frase per frase, alternando traduzione ed esecuzione (una sorta di traduzione simultanea tipica della lingua parlata). Spesso la distinzione tra compilazione e traduzione si trasferisce direttamente a livello del linguaggio e si distingue così tra linguaggi compilati e linguaggi interpretati. In realtà tale dicotomia dovrebbe limitarsi alla loro implementazione (e non ai linguaggi stessi), sebbene il progetto di un dato linguaggio venga preventivamente fatto sulla base del tipo di esecuzione privilegiata. L’impiego di un traduttore conferisce al programma una maggiore flessibilità e al programmatore una più ampia libertà d’intervento. Tali proprietà vengono tuttavia pagate a scapito di una minore velocità di esecuzione (al tempo di esecuzione si somma quello necessario alla traduzione). Di conseguenza, i traduttori sono utilizzati soprattutto in implementazioni nelle quali la velocità non rappresenta un parametro critico. D’altra parte, i programmi sviluppati per essere interpretati si prestano a una maggiore portabilità, ossia alla possibilità di essere eseguiti su architetture diverse senza incontrare difficoltà, al contrario dei programmi per compilatori che sono invece convertiti in istruzioni in linguaggio macchina specifiche della particolare macchina sulla quale avviene l’implementazione e non portabili altrove. Programmi destinati a molti utenti che lavorano su architetture diverse sono allora di preferenza interpretati, cosicché possa essere distribuita una sola copia di codice sorgente valida per tutti. Vi è poi una via di mezzo tra interpreti e compilatori ed è costituita da quei linguaggi dapprima parzialmente compilati poi interpretati nel corso dell’esecuzione. Il codice prodotto dalla prima fase di compilazione, che in alcuni linguaggi come Java è detto bytecode, è poi successivamente interpretato (per es., dalla JVM, Java virtual machine) e trasformato in codice oggetto. Si sfruttano in tal modo sia i vantaggi della parziale compilazione (efficienza) sia quelli dell’interpretazione (portabilità).
→ Computer science; Programmazione, linguaggi di