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 25:
 
==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 tredue diversiprincipali modelli:, [[compilazione]], e [[interpretazione]], oche [[cross-compilazione]]ammettono alcune varianti e possono essere combinati fra loro.
 
===Compilazione===
Riga 34:
 
===Transcompilazione===
In questo modello viene usato un programma detto [[transcompilatore]], la cui funzione è quella di tradurre ilun programma sorgente scritto in un linguaggio ad alto livello in un programma scritto in un altro linguaggio anch'essoad diversoalto dallivello linguaggio(ovvero, macchinadi livello paragonabile).<ref>[http://www.compilers.net/paedia/compiler/index.htm Types of compilers]</ref> 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]].
 
===Approcci ibridi===
Molti linguaggi moderni (per esempio [[Java (linguaggio di programmazione)|Java]]) adottano un approccio ibrido fra compilazione e interpretazione, in cui il codice sorgente viene "compilato" in un linguaggio intermedio, molto vicino al linguaggio macchina, che viene poi interpretato da un programma che ha un funzionamento molto simile a quello di un [[CPU|processore]] fisico. Questo approccio si distingue dalla transcompilazione perché il linguaggio di arrivo, pur non essendo linguaggio macchina in senso stretto, non è un linguaggio ad alto livello (e in genere è un linguaggio progettato appositamente e non destinato all'uso diretto da parte di un programmatore).
 
== Livelli di astrazione ==