Java/La macchina virtuale: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
taglio via del testo
m sposto paragrafo
Riga 11:
Esso è stato progettato anche per avere una certa indipendenza dallo stesso linguaggio Java; questo permette anche ad [[w:en:Da Vinci Machine|altri linguaggi]] di essere compilati in questo formato.
 
=== LaIl macchinalinguaggio virtualeJava ===
; Modifiche separate
Uno degli aspetti più interessanti è che l'aggiunta di un nuovo costrutto al linguaggio ''non sempre'' comporta la modifica delle specifiche della macchina virtuale o la modifica delle macchine virtuali esistenti. Ad esempio, buona parte delle aggiunte che sono state introdotte con la versione 5 della piattaforma sono state progettate in modo che il compilatore possa compilare i nuovi costrutti del linguaggio usando istruzioni "vecchie" nel bytecode.<ref>Questo non è stato possibile per ''tutto'': ad esempio, restano escluse da questo meccanismo le annotazioni.</ref>
 
Un modo semplice per ottenere questo è progettare costrutti che siano "zucchero sintattico" per costrutti preesistenti e che già hanno un corrispettivo nel bytecode. In altre parole, vengono resi disponibili nuovi costrutti che rappresentano un modo più comodo e semplice di scrivere le stesse cose.
 
I vantaggi principali di questo approccio:
*non è necessario modificare la macchina virtuale preesistente per supportare i nuovi costrutti;
*tende a mantenere i due linguaggi semplici da imparare, in quanto i nuovi costrutti si basano su quelli vecchi e già familiari;
*è possibile sviluppare indipendentemente le specifiche del linguaggio e della macchina virtuale.
 
== La macchina virtuale ==
Concretizza un modello di elaboratore astratto. Tra i vantaggi di questo approccio:
#facilita la realizzazione di programmi portabili su piattaforme diverse.
Line 35 ⟶ 46:
 
La soluzione adottata per default dalle macchine virtuali distribuite dalla Sun a gennaio 2010 è la terza. Essa permette di raggiungere prestazioni in genere paragonabili a quelle di un programma scritto ad esempio in C e compilato direttamente in codice nativo.
 
== Il linguaggio Java ==
; Modifiche separate
Uno degli aspetti più interessanti è che l'aggiunta di un nuovo costrutto al linguaggio ''non sempre'' comporta la modifica delle specifiche della macchina virtuale o la modifica delle macchine virtuali esistenti. Ad esempio, buona parte delle aggiunte che sono state introdotte con la versione 5 della piattaforma sono state progettate in modo che il compilatore possa compilare i nuovi costrutti del linguaggio usando istruzioni "vecchie" nel bytecode.<ref>Questo non è stato possibile per ''tutto'': ad esempio, restano escluse da questo meccanismo le annotazioni.</ref>
 
Un modo semplice per ottenere questo è progettare costrutti che siano "zucchero sintattico" per costrutti preesistenti e che già hanno un corrispettivo nel bytecode. In altre parole, vengono resi disponibili nuovi costrutti che rappresentano un modo più comodo e semplice di scrivere le stesse cose.
 
I vantaggi principali di questo approccio:
*non è necessario modificare la macchina virtuale preesistente per supportare i nuovi costrutti;
*tende a mantenere i due linguaggi semplici da imparare, in quanto i nuovi costrutti si basano su quelli vecchi e già familiari;
*è possibile sviluppare indipendentemente le specifiche del linguaggio e della macchina virtuale.