Wie andere gesagt haben, sind kompiliert und interpretiert spezifisch für eine Implementierung einer Programmiersprache; Sie sind der Sprache nicht inhärent. Zum Beispiel gibt es C-Interpreter.
Wir können (und in der Praxis auch) Programmiersprachen anhand ihrer häufigsten (manchmal kanonischen) Implementierung klassifizieren. Zum Beispiel sagen wir, dass C kompiliert ist.
Zunächst müssen wir ohne Mehrdeutigkeit Interpreter und Compiler definieren:
Ein Interpreter für Sprache X ist ein Programm (oder eine Maschine oder nur eine Art von Mechanismus im Allgemeinen), das jedes in Sprache X geschriebene Programm p so ausführt, dass es die Effekte ausführt und die Ergebnisse gemäß der Spezifikation von X bewertet .
Ein Compiler von X nach Y ist ein Programm (oder eine Maschine oder nur eine Art Mechanismus im Allgemeinen), das jedes Programm p aus einer Sprache X in ein semantisch äquivalentes Programm p ' in einer Sprache Y so übersetzt, dass p interpretiert wird ' mit einem Interpreter für Y die gleichen Ergebnisse erzielen und haben die gleichen Wirkungen wie die Interpretation p mit einem Interpreter für X .
Beachten Sie, dass CPUs aus Sicht des Programmierers Maschinendolmetscher für ihre jeweilige native Maschinensprache sind.
Jetzt können wir eine vorläufige Klassifizierung der Programmiersprachen in drei Kategorien vornehmen, abhängig von der häufigsten Implementierung:
- Hart kompilierte Sprachen: Wenn die Programme vollständig in Maschinensprache kompiliert sind. Der einzige verwendete Interpreter ist eine CPU. Beispiel: Um ein Programm in C auszuführen, wird der Quellcode normalerweise in die Maschinensprache kompiliert, die dann von einer CPU ausgeführt wird.
- Interpretierte Sprachen: Wenn kein Teil des Originalprogramms in Maschinensprache kompiliert wurde. Mit anderen Worten, es wird kein neuer Maschinencode generiert. Es wird nur vorhandener Maschinencode ausgeführt. Es muss auch ein anderer Interpreter als die CPU verwendet werden (normalerweise ein Programm). Beispiel: Bei der kanonischen Implementierung von Python wird der Quellcode zuerst in Python-Bytecode kompiliert und dann wird dieser Bytecode von CPython ausgeführt, einem Interpreterprogramm für Python-Bytecode .
- Soft Compiled Languages: Wenn ein anderer Interpreter als die CPU verwendet wird, aber auch Teile des Originalprogramms in Maschinensprache kompiliert werden können. Dies ist der Fall bei Java, wo der Quellcode zuerst zu Bytecode kompiliert wird und dann der Bytecode vom Java-Interpreter interpretiert und / oder vom JIT-Compiler weiter kompiliert werden kann.
Manchmal werden weiche und harte kompilierte Sprachen als einfach kompiliert bezeichnet, daher wird C #, Java, C, C ++ als kompiliert bezeichnet.
Innerhalb dieser Kategorisierung war JavaScript eine interpretierte Sprache, aber das war vor vielen Jahren. Heutzutage ist es in den meisten wichtigen JavaScript-Implementierungen JIT-kompiliert in die native Maschinensprache, daher würde ich sagen, dass es in weich kompilierte Sprachen fällt.