Interpretierte Sprache - Interpreted language

Eine interpretierte Sprache ist eine Art Programmiersprache, für die es einen Interpreter gibt , der über eine virtuelle Maschine läuft. Der Interpreter führt den Code zeilenweise aus und konvertiert ihn in eine einfache Maschinensprache. Da die interpretierte Sprache über eine virtuelle Umgebung ausgeführt wird, gelten diese Sprachen als plattformunabhängig.

Die Begriffe interpretierte Sprache und kompilierte Sprache sind nicht genau definiert, da theoretisch jede Programmiersprache entweder interpretiert oder kompiliert werden kann. In der modernen Programmiersprachenimplementierung wird es immer beliebter, dass eine Plattform beide Optionen bietet.

Interpretierte Sprachen können auch Maschinensprachen gegenübergestellt werden. Funktionell bedeuten sowohl Ausführung als auch Interpretation dasselbe - die nächste Anweisung / Anweisung aus dem Programm abrufen und ausführen. Obwohl interpretierter Bytecode in seiner Form zusätzlich mit Maschinencode identisch ist und eine Assembler- Darstellung aufweist, ist der Begriff "interpretiert" manchmal für "softwareverarbeitete" Sprachen (durch virtuelle Maschine oder Emulator ) auf dem nativen (dh Hardware- ) Prozessor reserviert .

Grundsätzlich können Programme in vielen Sprachen kompiliert oder interpretiert, emuliert oder nativ ausgeführt werden, sodass diese Bezeichnung ausschließlich auf der Grundlage der üblichen Implementierungspraxis angewendet wird und keine wesentliche Eigenschaft einer Sprache darstellt.

Viele Sprachen wurden sowohl mit Compilern als auch mit Interpreten implementiert, darunter BASIC , C , Lisp und Pascal . Java und C # werden in Bytecode kompiliert , der für virtuelle Maschinen geeigneten interpretierten Sprache . Lisp-Implementierungen können interpretierten und kompilierten Code frei mischen.

Die Unterscheidung zwischen einem Compiler und einem Interpreter ist nicht immer genau definiert, und viele Sprachprozessoren kombinieren beides.

Historischer Hintergrund

In den frühen Tagen des Rechnens wurde das Sprachdesign stark von der Entscheidung beeinflusst, Kompilieren oder Interpretieren als Ausführungsmodus zu verwenden. Mit Smalltalk (1980), das zur Laufzeit interpretiert werden soll, können generische Objekte beispielsweise dynamisch miteinander interagieren.

Anfänglich wurden interpretierte Sprachen Zeile für Zeile zusammengestellt. Das heißt, jede Zeile wurde so kompiliert, wie sie ausgeführt werden sollte, und wenn eine Schleife oder ein Unterprogramm dazu führte, dass bestimmte Zeilen mehrmals ausgeführt wurden, wurden sie jedes Mal neu kompiliert. Dies ist viel seltener geworden. Die meisten sogenannten interpretierten Sprachen verwenden eine Zwischendarstellung , die Kompilieren und Interpretieren kombiniert.

Beispiele beinhalten:

Die Zwischendarstellung kann ein für alle Mal (wie in Java ), jedes Mal vor der Ausführung (wie in Ruby ) oder jedes Mal , wenn vor der Ausführung eine Änderung der Quelle festgestellt wird (wie in Python ) , kompiliert werden .

Vorteile

Das Interpretieren einer Sprache bietet Implementierungen zusätzliche Flexibilität gegenüber kompilierten Implementierungen. Zu den Funktionen, die in Interpreten häufig einfacher zu implementieren sind als in Compilern, gehören:

Darüber hinaus kann der Quellcode gelesen und kopiert werden, um den Benutzern mehr Freiheit zu geben.

Nachteile

Nachteile interpretierter Sprachen sind:

  • Ohne statische Typprüfung , die normalerweise von einem Compiler durchgeführt wird, können Programme weniger zuverlässig sein, da die Typprüfung eine Klasse von Programmierfehlern eliminiert (obwohl die Typprüfung des Codes mithilfe zusätzlicher eigenständiger Tools erfolgen kann. Siehe TypeScript beispielsweise)
  • Dolmetscher können anfällig für Code-Injection- Angriffe sein.
  • Langsamere Ausführung im Vergleich zur direkten Ausführung von nativem Maschinencode auf der Host- CPU . Eine Technik zur Verbesserung der Leistung ist die Just-in-Time-Kompilierung , bei der häufig ausgeführte Sequenzen interpretierter Anweisungen in Host-Maschinencode konvertiert werden. JIT wird am häufigsten mit der Kompilierung zu Bytecode wie in Java kombiniert .
  • Der Quellcode kann gelesen und kopiert werden (z. B. JavaScript auf Webseiten) oder einfacher durch Reflexion in Anwendungen rückentwickelt werden, in denen geistiges Eigentum einen kommerziellen Vorteil hat. In einigen Fällen wird die Verschleierung als teilweise Verteidigung dagegen verwendet.

Lackmustests

Es können verschiedene Kriterien verwendet werden, um zu bestimmen, ob eine bestimmte Sprache von ihren Benutzern als kompiliert oder interpretiert bezeichnet wird:

  • Wenn eine Unterroutine aufgerufen werden kann, bevor sie im Quellcode definiert ist, wird wahrscheinlich die gesamte Quelle vor der Ausführung zu einer Zwischendarstellung kompiliert. Beispiele: Perl , Java
  • Wenn eine Zwischendarstellung (z. B. Bytecode) normalerweise erstellt und direkt als separater Schritt beim Ausführen des Codes aufgerufen wird, wird die Sprache wahrscheinlich als kompiliert betrachtet. Beispiele: Java , C.
  • Wenn ein Syntaxfehler im Quellcode die Ausführung früherer Anweisungen nicht verhindert, handelt es sich wahrscheinlich um ein interpretiertes Paradigma. Beispiele: Unix-Shell- Sprachen

Diese sind nicht endgültig. Kompilierte Sprachen können interpretatorähnliche Eigenschaften haben und umgekehrt.

Liste der häufig verwendeten interpretierten Sprachen

Sprachen, die normalerweise zu Bytecode kompiliert werden

Viele Sprachen werden zuerst zu Bytecode kompiliert . Manchmal kann Bytecode auch mit einem AOT-Compiler zu einer nativen Binärdatei kompiliert oder nativ vom Hardwareprozessor ausgeführt werden.

Siehe auch

Zitat

  1. ^ "CodePlex-Archiv" . CodePlex-Archiv . Abgerufen am 7. April 2018 .

Verweise