Linguaggio di programmazione ad alto livello: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Riformulo tutto. L'interprete non è un programma che *traduce* il linguaggio ad alto livello, è un programma che lo *esegue*. |
|||
Riga 24:
In generale, la maggior parte dei linguaggi di programmazione ad alto livello moderni conserva alcuni concetti di fondo che è possibile ricondurre ad alcune caratteristiche tipiche del linguaggio macchina. Concetti come quelli di [[variabile (informatica)|variabile]] e [[assegnamento]] sono una versione [[astrazione (informatica)|astratta]] dello spostamento di dati fra [[cella di memoria|celle di memoria]]; e il fatto che il paradigma di programmazione dominante sia quello [[programmazione imperativa|imperativo]] si può facilmente giustificare con la considerazione che anche i linguaggi macchina ''sono'' imperativi.
==Modelli di esecuzione==
Un linguaggio ad alto livello, per definizione, non è ''direttamente'' "eseguibile" da parte del calcolatore. L'esecuzione dei linguaggi ad alto livello si può basare su tre diversi modelli: [[compilazione]], [[interpretazione]] o [[cross-compilazione]].
===Compilazione===
In questo modello viene usato un programma detto [[compilatore]], la cui funzione è quella di tradurre il programma sorgente (ovvero nel linguaggio ad alto livello) in un programma in [[linguaggio macchina]] equivalente (ovvero che esibisce lo stesso comportamento). Il risultato della traduzione è quindi un programma scritto nel linguaggio macchina ''locale'', che può essere eseguito direttamente dal calcolatore. A valle della traduzione, sorgente e compilatore non sono più necessari per l'esecuzione del programma. Il costo della traduzione in linguaggio macchina (in termini di tempo e memoria necessari per portarla a termine) viene "pagato" solo durante la fase di ''compilazione''. Il risultato della compilazione è "[[portabilità|non portabile]]", essendo generato in uno specifico linguaggio macchina (e per uno specifico [[sistema operativo]]).
===Interpretazione===
In questo modello viene usato un programma detto [[Interprete (informatica)|interprete]], la cui funzione è quella di interpretare le istruzioni del programma sorgente ed eseguirle. A differenza del compilatore, l'interprete non produce mai un eseguibile. Di conseguenza, interprete e sorgente sono sempre necessari a ogni esecuzione del programma. Questo approccio consente una maggiore portabilità (lo stesso programma può essere eseguito su diversi calcolatori e diversi sistemi operativi, a patto che sia disponibile un interprete) ma ha generalmente prestazioni inferiori (poiché il costo dell'analisi e dell'interpretazione del codice sorgente viene pagato durante l'esecuzione).
===Transcompilazione===
In questo modello viene usato un programma detto [[transcompilatore]], la cui funzione è quella di tradurre il programma sorgente in un programma scritto in un altro linguaggio anch'esso diverso dal linguaggio macchina. L'esecuzione avviene poi secondo il modello previsto per il linguaggio "di arrivo" del processo di transcompilazione. Una variante molto diffusa di questo modello prevede la compilazione in un linguaggio intermedio, molto vicino al linguaggio macchina, che viene interpretato. Il linguaggio intermedio viene talvolta detto [[bytecode]]. Un linguaggio moderno basato su questo approccio è per esempio [[Java (linguaggio di programmazione)|Java]].
== Livelli di astrazione ==
|