Sì e no. Sì, lo scenario classico è uno sviluppatore che utilizza un compilatore per generare codice macchina dal codice sorgente e il codice macchina viene quindi distribuito agli utenti.
Lì ci sono tuttavia alcune eccezioni. Innanzitutto, molti progetti open source sono distribuiti principalmente (o anche solo in forma di codice sorgente) e si aspettano che l'utente li installi digitando un paio di comandi come make
e poi make intall
. Questo invocherà il compilatore, il linker, ecc., Per generare il codice macchina dal codice sorgente per quel computer degli utenti. In questi casi, tuttavia, il processo di creazione e installazione è (almeno inteso per essere) automatizzato al punto che l'utente raramente ha bisogno di molta conoscenza al di là del fatto che se non ha mai installato un pacchetto solo codice sorgente in precedenza , il loro gestore di pacchetti in genere elencherà alcuni pacchetti di "sviluppo" come prerequisito per l'installazione dell'applicazione a cui tengono veramente (anche se alcuni lo considerano ancora ostile agli utenti finali).
Un'altra eccezione (che è stata accennata, ma non spiegata molto bene nelle altre risposte che ho visto) è compilatori just-in-time (JIT). Un paio di ovvi esempi di compilatori JIT sono Microsoft Common Language Runtime (CLR) e Java Virtual Machine (JVM). In questi casi, normalmente ci sono due compilatori completamente separati coinvolti nella traduzione del codice sorgente in codice macchina. Uno è usato dallo sviluppatore. Tuttavia, anziché generare direttamente il codice macchina, genera un codice byte indipendente dalla macchina. CLR / JVM include quindi un compilatore secondo , completamente separato dal primo, che converte quei codici byte in codice macchina per il computer di destinazione.
Devo aggiungere che il secondo compilatore non è strettamente necessario. Le prime versioni di JVM (per un esempio) hanno semplicemente interpretato i codici byte invece di compilarli. Questo spesso comporta una penalizzazione delle prestazioni abbastanza grave, quindi le JVM più ragionevolmente recenti destinate all'uso di produzione includono un compilatore JIT.