Stesso problema, diverse soluzioni
Lo stesso problema può essere risolto in modi diversi; algoritmi diversi possono infatti essere soluzioni equivalenti di uno stesso problema, cioè calcolare la stessa funzione.
Algoritmi equivalenti
Algoritmi equivalenti possono essere diversi perché:
- Adottano soluzioni concettuali diverse;
- Sono scritti in linguaggi differenti;
- Magari sono destinati a esecutori differenti.
Esecutore ed algoritmi
Per scrivere una soluzione nella forma definitiva è necessario sapere chi la eseguirà. L’esecutore di riferimento per il nostro studio è ovviamente il calcolatore elettronico. Un calcolatore reale è in grado di comprendere solo soluzioni codificate nel proprio linguaggio, cioè in linguaggio macchina. Il linguaggio macchina non è di uso pratico, né di facile comprensione. E dunque vi sono due opportunità:
- Visto che l’esecutore finale è una macchina reale M, si può scrivere la soluzione nel suo linguaggio LM.
- Si può adoperare un linguaggio L più “amichevole”, un linguaggio di programmazione ad alto livello:
- Si scrive l’algoritmo nel linguaggio L;
- Si traduce (per mezzo di un compilatore) la soluzione codificata nel linguaggio L in un’altra (ad essa equivalente) codificata nel linguaggio LM della macchina;
- Oppure si esegue l’algoritmo per mezzo di un intermediario (detto interprete) che opera sulla macchina M senza necessità di traduzioni.
Compilatori e interpreti
Compilatore
L e LI sono linguaggi di programmazione. Un compilatore è un traduttore che trasforma algoritmi scritti nel linguaggio L in algoritmi equivalenti scritti nel linguaggio LI. Un compilatore è un programma che può essere eseguito da una certa macchina M e che esegue la trasformazione prescritta; il linguaggio LI è spesso il linguaggio macchina di M, ma non è obbligatorio!
Interprete
L è un linguaggio di programmazione, M una macchina. Un interprete del linguaggio L è un esecutore, cioè un programma per la macchina M, in grado di eseguire (senza tradurli) programmi scritti nel linguaggio L. In pratica, un interprete è un programma che simula il comportamento di una macchina diversa (astratta o concreta che sia).
Situazioni ibride
Un programma scritto nel linguaggio L (codice sorgente) può essere compilato nel linguaggio LI e il risultato (codice intermedio) eseguito dall’interprete VL (detto anche macchina virtuale). Un esempio è Java, che traduce il codice sorgente in un linguaggio per macchine virtuali.
-
Appunti Compilatori e interpreti - Appunti iniziali corso
-
Lezione 3 Meccanica applicata alle macchine
-
Appunti di Macchine - parte 3
-
Parte 3: Fluidodinamica e macchine: macchine