Why is there a need to translate source code into machine code?
Hast du schon einmal versucht, ein Gespräch mit jemandem zu führen, mit dem du keine gemeinsame Sprache hast? Vielleicht können einige Gesten allgemeine Ideen vermitteln, aber eine nuancierte Diskussion ist ohne ein gemeinsames Verständnis eines einzigen Sprachprotokolls praktisch unmöglich. In dieser Situation macht ein Übersetzer einen großen Unterschied.
trans-late
transˈlāt,tranzˈlāt/
Verb
1.Drückt den Sinn von (Wörtern oder Text) in einer anderen Sprache aus.
Ein Prozessor ist eine Maschine, die sehr spezifische und begrenzte Aufgaben in schneller Folge mit unglaublicher Genauigkeit ausführt. Er weiß nur, was zu tun ist, weil er ausdrückliche Anweisungen erhält, wie er jede einzelne Aufgabe auszuführen hat. Die Art und Weise, wie diese Anweisungen an den Compiler gegeben werden, stellt eine eigene Sprache dar. Diese Sprache ist für den Compiler unglaublich leicht zu verstehen, weil er speziell dafür gebaut wurde. Der Mensch hingegen wurde nicht dafür geschaffen.
Die Art von Anweisungen, die ein Compiler benötigt, um seine Aufgabe zu erfüllen, sind für Menschen ohne jahrelange Übung und Erfahrung fast unmöglich zu verstehen und zu interpretieren. Das bedeutet nicht, dass Menschen generell Schwierigkeiten mit der Sprache haben; es bedeutet nur, dass Menschen und Compiler unterschiedlich "denken" und daher unterschiedliche Arten von Sprache benötigen, um ihre Aufgaben zu erfüllen.
In diesem Sinne wurden Algorithmen (komplexe Befehlssätze) geschrieben, um eine begrenzte Anzahl von Befehlen in einer für Menschen leichter verständlichen Sprache in Maschinenbefehle zu übersetzen, die ein Computer verstehen kann. Wir basieren unsere Programmiersprachen auf unseren menschlichen Sprachen und schreiben dann einen Code, der diese Anweisungen in etwas umwandelt, das der Compiler sehr gut versteht.
Dieser Prozess, der ironischerweise vom Compiler durchgeführt wird, kann ziemlich viel Zeit und Rechenleistung in Anspruch nehmen, so dass er in der Regel nur einmal für jede Version jedes geschriebenen Programms durchgeführt wird, wodurch eine binäre ausführbare Datei entsteht, die direkt vom Compiler gelesen werden kann. Diese ausführbare Binärdatei und nicht der eigentliche Quellcode ist das, was mit jedem Benutzer der Software geteilt wird. Aus diesem Grund erfolgt die Kompilierung der Software fast immer im Voraus, entweder auf dem Rechner des Entwicklers oder auf dem Rechner des Unternehmens, das die Software erstellt hat.
Es gibt interpretierte Sprachen, bei denen dieser Prozess bei jeder Ausführung des Programms im laufenden Betrieb erfolgt, obwohl es viele komplexe Systeme gibt, die darauf ausgerichtet sind, diesen Prozess so schnell und effizient wie möglich zu gestalten. Websites und viele Backend-Serveranwendungen verwenden diese Art von interpretierten Sprachen, was die Versionsaktualisierung erheblich erleichtert, da der Kompilierungsschritt für den Entwickler nicht von Belang ist.
Es gibt auch Sprachen, die eine "JIT"-Strategie (Just-in-Time-Kompilierung) verwenden, um eine neue Version einer Anwendung nur dann zu kompilieren, wenn sie zur Ausführung benötigt wird, und nur dann, wenn der Quellcode seit der letzten Kompilierung geändert wurde. Diese Strategie wird fast nie außerhalb einer Produktionsserver-Umgebung verwendet und findet daher auch nicht auf deinem lokalen Rechner statt, es sei den du bist ein Entwickler.
In allen Fällen besteht das Ziel darin, die Anweisungen eines Menschen in Anweisungen zu übersetzen, die ein Computer verstehen kann.