Interprete (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Folto82 (discussione | contributi)
Riga 20:
 
==Approcci ibridi==
Esistono invece numerosi approcci ''ibridi'' fra linguaggi completamente interpretati e completamente compilati. Alcune versioni di [[Lisp]] consentono entrambi gli approcci, e consentono addirittura l'esecuzione di programmi parzialmente interpretati e parzialmente compilati, cosicché, per esempio, un nuovo [[subroutine|sottoprogramma]] possa essere provato in forma interpretata e, una volta terminato il [[debugging]], essere compilato per migliorarne le prestazioni.

Molti interpreti non eseguono direttamente il codice sorgente, ma lo convertono preventivamente in una forma interna più compatta, per esempio in un [[albero sintattico astratto]]. Ancora diverso è l'approccio di [[Emacs Lisp]] e [[Java (linguaggio)|Java]], in cui viene impiegato un compilatore che trasforma il [[codice sorgente]] in un formato intermedio detto (per entrambi i linguaggi !) [[bytecode]], abbastanza vicino al [[linguaggio macchina]] (e quindi con un costo di interpretazione moderato), ma eseguito da un interprete e non direttamente dal processore (e quindi [[portabilità|portabile]]).
 
Una tecnica che ha destato notevole interesse negli ultimi anni (ed è applicata dalla maggior parte delle attuali implementazioni di [[Java (linguaggio)|Java]] e dai linguaggi della famiglia [[Microsoft .Net|DOTNET]] di Microsoft) prende il nome di [[Compilatore just-in-time|compilazione "just in time"]] o JIT. Questa tecnica può essere considerata come una [[ottimizzazione (informatica)|ottimizzazione]] dell'interpretazione, in cui l'interprete compila durante l'esecuzione i frammenti di codice che vengono eseguiti con maggiore frequenza, per ridurre il costo delle loro successive esecuzioni.