Ja und nein. Ja, im klassischen Szenario verwendet ein Entwickler einen Compiler, um Maschinencode aus dem Quellcode zu generieren, und der Maschinencode wird dann an die Benutzer verteilt.
Es gibt jedoch einige Ausnahmen. Erstens werden viele Open Source-Projekte in erster Linie (oder sogar ausschließlich) in Form von Quellcode verteilt, und der Endbenutzer muss sie installieren, indem er ein paar Befehle wie make
und dann eingibtmake intall
. Dadurch wird der Compiler, Linker usw. aufgerufen, um den Computercode aus dem Quellcode für den Computer dieses Benutzers zu generieren. In diesen Fällen wird der Prozess des Erstellens und Installierens jedoch so weit automatisiert, dass der Benutzer nur selten viel Wissen darüber benötigt, abgesehen von der Tatsache, dass er noch nie ein reines Quellcode-Paket installiert hat Ihr Paketmanager listet normalerweise ein "Entwicklungs" -Paket als Voraussetzung für die Installation der Anwendung auf, die sie wirklich interessieren (obwohl einige dies für Endbenutzer immer noch als unfreundlich betrachten).
Eine andere Ausnahme (die angedeutet, aber in den anderen Antworten, die ich gesehen habe, nicht sehr gut erklärt wurde) sind Just-in-Time-Compiler (JIT). Einige offensichtliche Beispiele für JIT-Compiler sind die Microsoft Common Language Runtime (CLR) und die Java Virtual Machine (JVM). In diesen Fällen gibt es normalerweise zwei völlig separate Compiler, die an der Übersetzung des Quellcodes in Maschinencode beteiligt sind. Eine wird vom Entwickler verwendet. Es wird jedoch kein direkter Maschinencode generiert, sondern ein maschinenunabhängiger Bytecode. Die CLR / JVM enthält dann einen zweiten Compiler, der von dem ersten vollständig getrennt ist und diese Bytecodes in Maschinencode für den Zielcomputer konvertiert.
Ich sollte hinzufügen, dass der zweite Compiler nicht unbedingt erforderlich ist. Frühe Versionen der JVM (zum Beispiel) haben die Bytecodes nur interpretiert, anstatt sie zu kompilieren. Dies ist jedoch häufig mit erheblichen Leistungseinbußen verbunden. Daher enthalten die meisten für den produktiven Einsatz bestimmten JVMs der neuesten Generation einen JIT-Compiler.