"perché non quindi compilare per x86"
Perché allora non si può sfruttare le caratteristiche specifiche di particolare cpu sarà eseguito su. In particolare, se vogliamo leggere "compile per x86" come "produrre codice nativo che può essere eseguito su un 386 e i suoi discendenti", il codice risultante non può contare su qualcosa di vecchio come le istruzioni mmx.
In questo modo, il risultato finale è che è necessario compilare per ogni architettura esatta su cui verrà eseguito (per quanto riguarda quelli che non esistono ancora) e richiedere all'installatore di selezionare quale file eseguibile mettere in atto. Oppure, sento che il compilatore intel C++ produrrà diverse versioni della stessa funzione, che differiscono solo dalle funzioni della cpu usate, e scelgono quella giusta in fase di esecuzione in base a ciò che la CPU riporta come disponibile.
D'altra parte, è possibile visualizzare il codice byte come sorgente "semi-compilata", simile a un formato intermedio che un compilatore nativo (a meno che non venga richiesto) non scriverà effettivamente sul disco. L'ambiente runtime può quindi eseguire la compilazione finale, sapendo esattamente quale architettura verrà utilizzata. Questo è il motivo per cui un codice C# /. Net potrebbe leggermente sovraperformare il codice C++ su alcune attività cpu-intensive in alcuni benchmark qualche tempo fa.
La "compilazione finale" di bytecode può anche fare ipotesi di ottimizzazione aggiuntive che sono (da una prospettiva di compilazione statica) distintamente non sicure * e ricompilare solo se tali ipotesi sono state trovate errate in seguito.
Penso che sia possibile, aspetterò le risposte con voi)) – Roman
Su quale Solarix x64 o SPARC? ;) –
A proposito, la portabilità non è l'unico vantaggio. Proprio il più ovvio –