Tak i nie. Tak, klasyczny scenariusz polega na tym, że programista używa kompilatora do generowania kodu maszynowego z kodu źródłowego, a następnie kod maszynowy jest następnie dystrybuowany do użytkowników.
Tam są kilka wyjątków od tego jednak. Po pierwsze, wiele projektów typu open source jest dystrybuowanych głównie (lub nawet wyłącznie) w formie kodu źródłowego, i oczekują, że użytkownik końcowy je zainstaluje, wpisując kilka poleceń, takich jak, make
a następniemake intall
. Spowoduje to wywołanie kompilatora, konsolidatora itp. W celu wygenerowania kodu maszynowego z kodu źródłowego dla tego komputera użytkownika. Jednak w takich przypadkach proces budowania i instalowania jest (przynajmniej zamierzony) zautomatyzowany do tego stopnia, że użytkownik rzadko potrzebuje dużej wiedzy na ten temat, poza tym, że jeśli nigdy wcześniej nie instalował pakietu tylko do kodu źródłowego , ich menedżer pakietów zazwyczaj wymienia niektóre pakiety „programistyczne” jako warunek wstępny instalacji aplikacji, na których im naprawdę zależy (choć niektórzy nadal uważają to za nieprzyjazne dla użytkowników końcowych).
Kolejnym wyjątkiem (o którym wspomniano, ale nie wyjaśniono go zbyt dobrze w innych odpowiedziach, które widziałem) są kompilatory just-in-time (JIT). Kilka oczywistych przykładów kompilatorów JIT to Microsoft Common Language Runtime (CLR) i Java Virtual Machine (JVM). W takich przypadkach zwykle dwa całkowicie osobne kompilatory biorą udział w tłumaczeniu kodu źródłowego na kod maszynowy. Jeden jest używany przez programistę. Jednak zamiast generować kod maszynowy bezpośrednio, generuje kod bajtowy niezależny od maszyny. CLR / JVM zawiera następnie drugi kompilator, całkowicie odrębny od pierwszego, który konwertuje te kody bajtów na kod maszynowy dla komputera docelowego.
Powinienem dodać, że drugi kompilator nie jest absolutnie konieczny. Wczesne wersje JVM (na przykład) po prostu interpretowały kody bajtów zamiast ich kompilowania. Często wiąże się to jednak z dość poważnym ograniczeniem wydajności, więc najbardziej rozsądne najnowsze maszyny JVM przeznaczone do użytku produkcyjnego obejmują kompilator JIT.