Invece di compilare il codice sorgente per il rispettivo SO (sul quale è indirizzato), compili una volta ed esegui ovunque.
Per il gusto di questa domanda, la chiamerei VM (ad esempio, sia per Java che per .NET). Quindi questo l'esecuzione dei programmi diventa qualcosa come
------------ ---- ----
| Executable | -> | VM | -> | OS |
------------ ---- ----
Ha perfettamente senso, il compilatore rimane generico per la rispettiva VM. Tuttavia, l'implementazione della VM può variare a seconda della macchina che verrà installata, ad esempio (* nix, windows, mac) x (32 bit, 64 bit).
La mia domanda è, invece di scrivere VM per le rispettive macchine, perché il compilatore non è scritto per quella macchina specifica? Con questo, invece di scaricare la rispettiva VM, si scarica il rispettivo compilatore e il compilatore si prenderà cura del codice macchina + OS per quella specifica macchina. Risultato finale, esecuzione di codice nativo per qualsiasi macchina. Sicuramente, ogni codice sorgente avrebbe bisogno di una compilazione per quella specifica macchina, ma ora un giorno, i sistemi automatici, le build scm possono aiutarci a fare questa cosa.
Le mie ragioni di essere confusi sono giuste o mi mancano alcuni aspetti tecnici qui?
Modifica:
PORTABILITÀ :
Sì, è una delle ragioni, ma la portabilità è un grosso problema nei sistemi automatici odierni? quanto spesso dobbiamo preoccuparci del fatto che non dobbiamo compilarlo per altre macchine? Avere un codice compilato per la macchina nativa darebbe prestazioni molto migliori. Prendi Java per esempio, non puoi fare programmazione a basso livello su Windows e devi scegliere JNI.
Assumi sistemi automatici come TeamCity / Jenkins o altri. Potremmo disporre di una tale configurazione automatica del sistema in cui il codice inviato tramite il controllo della versione risulterebbe nell'eseguibile.