Es gibt drei allgemeine Ausführungsmodi für moderne Hochsprachen:
Interpretiert Wenn in einer Sprache geschriebener Code interpretiert wird, wird seine Syntax gelesen und dann direkt ausgeführt, ohne Kompilierungsphase. Ein Programm, das Interpreter genannt wird, liest jede Programmanweisung und folgt dabei dem Programmfluss, entscheidet dann, was zu tun ist, und führt es aus. Eine Mischung aus einem Interpreter und einem Compiler kompiliert die Anweisung in Maschinencode und führt diesen aus; der Maschinencode wird dann verworfen, um neu interpretiert zu werden, wenn die Zeile erneut ausgeführt wird. Interpreter sind in der Regel die einfachsten Implementierungen des Verhaltens einer Sprache, verglichen mit den beiden anderen hier aufgeführten Varianten. Kompiliert Wenn in einer Sprache geschriebener Code kompiliert wird, wird seine Syntax vor der Ausführung in eine ausführbare Form umgewandelt. Es gibt zwei Arten der Kompilierung: Erzeugung von Maschinencode Einige Compiler kompilieren Quellcode direkt in Maschinencode. Dies ist die ursprüngliche Art der Kompilierung, und Sprachen, die auf diese Weise direkt und vollständig in maschinennahen Code umgewandelt werden, können als echte kompilierte Sprachen bezeichnet werden. Siehe Assembler. Zwischendarstellungen Wenn in einer Sprache geschriebener Code in eine Zwischendarstellung kompiliert wird, kann diese Darstellung für eine spätere Ausführung optimiert oder gespeichert werden, ohne dass die Quelldatei erneut gelesen werden muss. Wenn die Zwischendarstellung gespeichert wird, kann sie in einer Form wie Bytecode vorliegen. Die Zwischendarstellung muss dann interpretiert oder weiter kompiliert werden, um sie auszuführen. Virtuelle Maschinen, die Bytecode direkt ausführen oder ihn weiter in Maschinencode umwandeln, haben die einst klare Unterscheidung zwischen Zwischendarstellungen und wirklich kompilierten Sprachen verwischt. Quelltext-zu-Quelltext übersetzt oder transkompiliert Code, der in einer Sprache geschrieben wurde, kann in Begriffe einer Sprache niedrigeren Niveaus übersetzt werden, für die es bereits native Code-Compiler gibt. JavaScript und die Sprache C sind häufige Ziele für solche Übersetzer. Siehe CoffeeScript, Chicken Scheme und Eiffel als Beispiele. Konkret kann der generierte C- und C++-Code (wie er bei Verwendung der EiffelStudio-IDE aus der Sprache Eiffel generiert wird) im Verzeichnis EIFGENs eines beliebigen kompilierten Eiffel-Projekts gesehen werden. In Eiffel wird der Übersetzungsprozess als Transcompiling oder Transcompiled bezeichnet und der Eiffel-Compiler als Transcompiler oder Source-to-Source-Compiler.
Beachten Sie, dass Sprachen nicht strikt interpretierte Sprachen oder kompilierte Sprachen sind. Vielmehr nutzen Implementierungen des Sprachverhaltens das Interpretieren oder Kompilieren. Zum Beispiel sind ALGOL 60 und Fortran beide interpretiert worden (obwohl sie typischerweise kompiliert wurden). In ähnlicher Weise zeigt Java die Schwierigkeit des Versuchs, diese Bezeichnungen auf Sprachen und nicht auf Implementierungen anzuwenden; Java wird zu Bytecode kompiliert, der dann entweder durch Interpretieren (in einer Java Virtual Machine (JVM)) oder durch Kompilieren (typischerweise mit einem Just-in-Time-Compiler wie HotSpot, wiederum in einer JVM) ausgeführt wird. Darüber hinaus ist das Kompilieren, Transkompilieren und Interpretieren nicht strikt auf die Beschreibung des Compiler-Artefakts (binäres Executable oder IL-Assembly) beschränkt.
Hochsprachen-ComputerarchitekturBearbeiten
Alternativ ist es möglich, dass eine Hochsprache direkt von einem Computer implementiert wird – der Computer führt den HLL-Code direkt aus. Dies wird als Hochsprachen-Computerarchitektur bezeichnet – die Computerarchitektur selbst ist für eine bestimmte Hochsprache ausgelegt. Die Burroughs-Großsysteme waren z.B. Zielmaschinen für ALGOL 60.