Un collega e io di recente abbiamo discusso di versioni Java e JVM. Io uso Java 7 ma usiamo Java 6 per il nostro client (mentre dice che alcuni sono ancora su 5). Il mio pensiero immediato è stato: perché non possiamo indirizzare anche quelle macchine virtuali?
La Java VM è in qualche modo diversa da una macchina reale in quanto ha un sacco di funzioni di runtime. Digitare controllo, gestione delle eccezioni, garbage collection, ecc. Ma è ancora una macchina virtuale con un bytecode. (Questo è il motivo per cui possiamo avere cose come C in compilatori JVM .) Quindi, perché non possiamo mirare a macchine virtuali più vecchie con la versione più recente di Java? Perché la lingua e il runtime devono essere legati insieme? Oltre all'evidente penalizzazione delle prestazioni, sembra che sia completamente possibile compilare il codice Java 7 su Java 6 JVM. (E considerando quanto poco è cambiato da Java 6 a 7, non riesco a immaginare che il compilatore cambi di così tanto.)