„Interpreter“ – Versionsunterschied

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
[ungesichtete Version][gesichtete Version]
Inhalt gelöscht Inhalt hinzugefügt
Keine Bearbeitungszusammenfassung
Erster Teil eines Überarbeitungsversuchs...
Zeile 3: Zeile 3:
{{Belege fehlen|2=Dieser Artikel|1=Der Artikel, insbesondere geschichtliche Angaben sowie subjektive Aussagen („Der größte Nachteil...“), sollten mit Belegen versehen werden.}}
{{Belege fehlen|2=Dieser Artikel|1=Der Artikel, insbesondere geschichtliche Angaben sowie subjektive Aussagen („Der größte Nachteil...“), sollten mit Belegen versehen werden.}}


Als '''Interpreter''' wird ein [[Computerprogramm]] bezeichnet, dass eine Abfolge von Anweisungen scheinbar direkt ausführt,<ref name="Pearson-Compiler-2008" /> wobei das Format der Anweisungen vorgegeben ist. Der Interpreter liest dazu eine oder mehrere [[Quelltext|Quelldateien]] ein, analysiert diese und führt sie anschließend Anweisung für Anweisung aus, indem er die Anweisungen in Maschinencode übersetzt, die ein Computersystem direkt ausführen kann. Interpreter gelten als etwas langsamer als [[Compiler]], bieten im Allgemeinen jedoch eine bessere Fehleranalyse als Compiler.<ref name="Pearson-Compiler-2008" />
Ein '''Interpreter''' ({{deS|Interpretierer}}; wird in der [[Softwaretechnik]] benutzt) ist ein [[Computerprogramm]], das einen Programm-[[Quellcode]] im Gegensatz zu [[Assembler (Informatik)|Assemblern]] oder [[Compiler]]n nicht in eine auf dem System direkt [[ausführbare Datei]] übersetzt, sondern den Quellcode einliest, analysiert und ausführt. Die Übersetzung des Quellcodes erfolgt also zur [[Laufzeit (Informatik)|Laufzeit]] des Programmes.<ref>{{Internetquelle |url=https://www.xovi.de/wiki/Interpreter |titel=Was ist ein Interpreter? » XOVI |sprache=de |zugriff=2019-05-29}}</ref><ref name="xovi">{{Internetquelle |url=http://web.archive.org/web/20170910221922/https://www.bg.bib.de/portale/bes/Progentwicklung/Programmiersprachen/Programmiersprachen-110.htm |titel=Interpretersprachen |autor=Michael Bürger |zugriff=2019-05-29}}</ref> Der Übergang zu [[Kommandozeileninterpreter]]n ist unscharf, da diese häufig auch eine entsprechende [[Skriptsprache]] interpretieren können.

== Programmierung ==
Bei der Programmierung ist ein Interpreter fast immer ein Bestandteil der [[Softwareentwicklung]].
In ihrer Reinform übersetzen Compiler – im Unterschied zu Interpretern – die Anweisungen aus den Quelldateien in einem oder mehreren Durchläufen in Maschinencode für ein vorher festgelegtes Zielsystem und erstellen so ein [[ausführbare Datei|ausführbares]] [[Computerprogramm]]. Jedoch gibt es bereits hier die Unterscheidung zwischen Compiler-Compiler und Interpreter-Compiler, genauso wie es auch Interpreter-Interpreter und Compiler-Interpreter gibt.<ref name="Software-Engineering-1969" />

{{Zitat-en
|Text=Any good software engineer will tell you that a compiler and an interpreter are interchangeable.
|Autor=[[Tim Berners-Lee]]
|Quelle={{Literatur |Autor=Torben Ægidius Mogensen |Titel=Introduction to Compiler Design |Verlag=Springer Science & Business Media |Ort=London |Datum=2011 |Sprache=en |ISBN=978-0-85729-828-7 |Online={{Google Buch |BuchID=KvDustn1eikC |Seite=97 |Hervorhebung=Interpreter Compiler}} }}
|Übersetzung=Jeder gute Software-Entwickler wird Ihnen sagen, dass Compiler und Interpreter austauschbar sind.}}

Ist in die letzte Stufe ein Interpreter, so erfolgt die Übersetzung der Quelldatei zur [[Laufzeit (Informatik)|Laufzeit]] des Programmes.<ref>{{Internetquelle |url=https://www.xovi.de/wiki/Interpreter |titel=Was ist ein Interpreter? » XOVI |sprache=de |zugriff=2019-05-29}}</ref><ref name="xovi">{{Internetquelle |url=http://web.archive.org/web/20170910221922/https://www.bg.bib.de/portale/bes/Progentwicklung/Programmiersprachen/Programmiersprachen-110.htm |Titel=Interpretersprachen |Autor=Michael Bürger |Zugriff=2019-05-29}}</ref> Der Übergang zu [[Kommandozeileninterpreter]]n ist unscharf, da diese häufig auch eine entsprechende [[Skriptsprache]] interpretieren können.


Auch [[Emulator]]en gehören zu den Interpretern, da diese den [[Maschinencode]] des Gastsystems befehlsweise auf einem virtuellen Prozessor abarbeiten. Nicht dazu gehören viele [[virtuelle Maschine]]n, da diese Teile des Maschinencodes des Gastsystems auf dem Hostsystem ausführen können; dazu ist Binärkompatibilität der [[Hauptprozessor|Prozessoren]] erforderlich.
Auch [[Emulator]]en gehören zu den Interpretern, da diese den [[Maschinencode]] des Gastsystems befehlsweise auf einem virtuellen Prozessor abarbeiten. Nicht dazu gehören viele [[virtuelle Maschine]]n, da diese Teile des Maschinencodes des Gastsystems auf dem Hostsystem ausführen können; dazu ist Binärkompatibilität der [[Hauptprozessor|Prozessoren]] erforderlich.
Zeile 36: Zeile 49:


== Einzelnachweise ==
== Einzelnachweise ==
<references />
<references>
<ref name="Pearson-Compiler-2008">
{{Literatur
| Autor = Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
| Titel = Compiler: Prinzipien, Techniken und Werkzeuge
| Verlag = Pearson Deutschland GmbH
| Datum = 2008
| ISBN = 978-3-8273-7097-6
| Seiten = 1253
| Online =
{{Google Buch
| BuchID = pTKAwL64NkoC
| Seite = 3
| Hervorhebung = Interpreter
}}
}}</ref>
<!-- <ref name="Introduction-to-Compiler-Design">
{{Literatur
| Autor = Torben Ægidius Mogensen
| Titel = Introduction to Compiler Design
| Verlag = Springer Science & Business Media
| Ort = London
| Datum = 2011
| Sprache = en
| ISBN = 978-0-85729-828-7
| Online =
{{Google Buch
| BuchID = KvDustn1eikC
| Seite = 97
| Hervorhebung = Interpreter Compiler
}}
}}</ref> -->
<ref name="Software-Engineering-1969">
{{Literatur
| Autor = Julius T. Tou
| Titel = Software Engineering
| TitelErg = Proceedings of the Third Symposium on Computer and Information Sciences held in Miami Beach, Florida, December, 1969
| Verlag = Academic Press
| Ort = New York, London
| Datum = 1970
| Sprache = en
| ISBN = 978-0-323-15744-5
| Seiten = 288
| Online =
{{Google Buch
| BuchID = MXln3I0z90QC
| Seite = 147
| Hervorhebung = Interpreter Compiler
}}
}}</ref>
</references>


{{Normdaten|TYP=s|GND=4162129-3|REMARK=Ansetzungsform GND: „Interpretierer“.}}
{{Normdaten|TYP=s|GND=4162129-3|REMARK=Ansetzungsform GND: „Interpretierer“.}}

Version vom 15. September 2019, 16:59 Uhr

Als Interpreter wird ein Computerprogramm bezeichnet, dass eine Abfolge von Anweisungen scheinbar direkt ausführt,[1] wobei das Format der Anweisungen vorgegeben ist. Der Interpreter liest dazu eine oder mehrere Quelldateien ein, analysiert diese und führt sie anschließend Anweisung für Anweisung aus, indem er die Anweisungen in Maschinencode übersetzt, die ein Computersystem direkt ausführen kann. Interpreter gelten als etwas langsamer als Compiler, bieten im Allgemeinen jedoch eine bessere Fehleranalyse als Compiler.[1]

Programmierung

Bei der Programmierung ist ein Interpreter fast immer ein Bestandteil der Softwareentwicklung.

In ihrer Reinform übersetzen Compiler – im Unterschied zu Interpretern – die Anweisungen aus den Quelldateien in einem oder mehreren Durchläufen in Maschinencode für ein vorher festgelegtes Zielsystem und erstellen so ein ausführbares Computerprogramm. Jedoch gibt es bereits hier die Unterscheidung zwischen Compiler-Compiler und Interpreter-Compiler, genauso wie es auch Interpreter-Interpreter und Compiler-Interpreter gibt.[2]

“Any good software engineer will tell you that a compiler and an interpreter are interchangeable.”

„Jeder gute Software-Entwickler wird Ihnen sagen, dass Compiler und Interpreter austauschbar sind.“

Tim Berners-Lee: Torben Ægidius Mogensen: Introduction to Compiler Design. Springer Science & Business Media, London 2011, ISBN 978-0-85729-828-7 (englisch, eingeschränkte Vorschau in der Google-Buchsuche).

Ist in die letzte Stufe ein Interpreter, so erfolgt die Übersetzung der Quelldatei zur Laufzeit des Programmes.[3][4] Der Übergang zu Kommandozeileninterpretern ist unscharf, da diese häufig auch eine entsprechende Skriptsprache interpretieren können.

Auch Emulatoren gehören zu den Interpretern, da diese den Maschinencode des Gastsystems befehlsweise auf einem virtuellen Prozessor abarbeiten. Nicht dazu gehören viele virtuelle Maschinen, da diese Teile des Maschinencodes des Gastsystems auf dem Hostsystem ausführen können; dazu ist Binärkompatibilität der Prozessoren erforderlich.

Interpreter liegen zumeist in Maschinensprache des Zielprozessors vor, können aber auch selbst wieder in einer Interpretersprache vorliegen (siehe Beispiel unten) oder von einem Emulator interpretiert werden. Dies ist beliebig schachtelbar und wirkt sich dementsprechend auf die Abarbeitungsgeschwindigkeit aus.

Ein Nachteil der Interpretersprachen ist die im Vergleich zu kompilierten Programmen deutlich langsamere Ausführungsgeschwindigkeit. Reine Interpreter lesen und analysieren den Quellcode eines Programmes und führen dann die entsprechenden Aktionen aus. Dies ist im Vergleich zu Compilersprachen, bei denen das Programm vor seiner Ausführung in Maschinencode übersetzt wird, der dann vom Prozessor direkt ausgeführt wird, vergleichsweise zeitaufwändig. Der Vorteil liegt darin, dass reine Interpreter auf jeder Rechnerarchitektur lauffähig sind, wenn der Quellcode des Interpreters dort übersetzt werden kann.

Geschwindigkeitssteigerungen

Eine Kompromisslösung ist ein Just-in-time-Compiler (JIT-Compiler), bei dem das Programm erst zur Laufzeit, jedoch direkt in Maschinencode übersetzt wird. Danach wird der übersetzte Code direkt vom Prozessor ausgeführt. Durch Zwischenspeicherung des Maschinencodes müssen mehrfach durchlaufene Programmteile nur einmal übersetzt werden. Auch ermöglicht der JIT-Compiler eine stärkere Optimierung des Binärcodes. Allerdings sind solche Interpreter natürlich nur auf einer bestimmten Rechnerarchitektur lauffähig, weil sie Maschinencode für diese Architektur erzeugen.

Eine weitere Zwischenstufe sind Bytecode-Interpreter. Dabei wird der Quelltext (vorab oder zur Laufzeit) in einen einfachen Zwischencode übersetzt, der dann von einem Interpreter – auch häufig als virtuelle Maschine bezeichnet – ausgeführt wird.

Besonders in den 1980er Jahren benutzte man die Zwischenstufe, Befehle zum Eingabezeitpunkt in leichter dekodierbare Tokens umzuwandeln, die bei der (List-)Ausgabe wieder in Klartext umgewandelt wurden. Neben der Geschwindigkeitssteigerung war die Kompression des Quelltextes ein gewichtiges Argument. Prinzipiell war es damit auch möglich, jeweils muttersprachliche Schlüsselwörter zu verwenden, wenn man den Datenaustausch auf Basis des tokenisierten Quellprogramms durchführte.

Interpretersprachen

Als Interpretersprachen werden häufig Programmiersprachen bezeichnet, deren Haupt- oder Erstimplementierung ein Interpreter ist, als Gegenteil zu einer Programmiersprache, die einen Compiler verwendet (Compilersprache).[5] Grundsätzlich ist eine Programmiersprache nicht an eine Art der Implementierung gebunden und es existieren Mischform aus den beiden gegenteiligen Ansätzen.

Es gibt jedoch auch Programmiersprachen, die unter Gesichtspunkten der späteren Implementierung gestaltet wurden; dies ist bei manchen älteren Sprachen noch gut zu erkennen. So mussten Interpreter aufgrund der geringen Leistungsfähigkeit der frühen Computer möglichst einfach und klein gehalten werden, um nicht zu viel Rechenzeit und Arbeitsspeicher zu verbrauchen. Compiler hingegen konnten viel Rechenzeit und auch viel Arbeitsspeicher verbrauchen, denn wenn das Programm lief, waren sie nicht mehr aktiv. Deshalb wurden Sprachen, die interpretiert werden sollten, so gestaltet, dass sie einfach analysiert und ausgeführt werden können. Wohingegen Sprachen, die compiliert werden sollten, auch aufwändig zu analysierende und bearbeitende Konstrukte enthalten konnten. Heute spielt dies beim Entwurf einer Programmiersprache nur noch in den allerseltensten Fällen eine Rolle.

Für einige Sprachen existieren verschiedenartige Implementierungen. Hierbei sticht die Sprache Scheme hervor, für die eine unüberschaubare Vielzahl an Implementierungen existiert, die auf vielen verschiedenen Konzepten basieren. Hierzu noch ein Beispiel: Die Programmiersprache C, ist sehr stark darauf ausgelegt compiliert zu werden. Doch es existieren trotzdem Interpreter wie der CINT und der Ch für diese Sprache und das, obwohl C oft als ein Paradebeispiel für eine Sprache genannt wird, die keine „Interpretersprache“, sondern eine „Compilersprache“ ist.

Als Interpretersprachen bekannt sind APL, BASIC, Forth, Perl, Python, Ruby, PHP und viele andere.[4] Als eine Unter- oder verwandte Kategorie der Interpretersprachen werden manchmal die Skriptsprachen genannt.

Bekannte Programmiersprachen, die üblicherweise in Bytecode übersetzt werden, sind Java, C#, Perl und Python.

Für manche Sprachen (etwa Smalltalk) gibt es je nach Anbieter Interpreter, Bytecode-Interpreter, JIT-Compiler oder Compiler in andere Sprachen (beispielsweise nach C oder .NET).

Der Übergang zwischen reinen Interpretern und reinen Compilern ist fließend.

Einzelnachweise

  1. a b Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman: Compiler: Prinzipien, Techniken und Werkzeuge. Pearson Deutschland GmbH, 2008, ISBN 978-3-8273-7097-6, S. 1253 (eingeschränkte Vorschau in der Google-Buchsuche).
  2. Julius T. Tou: Software Engineering. Proceedings of the Third Symposium on Computer and Information Sciences held in Miami Beach, Florida, December, 1969. Academic Press, New York, London 1970, ISBN 978-0-323-15744-5, S. 288 (en, eingeschränkte Vorschau in der Google-Buchsuche).
  3. Was ist ein Interpreter? » XOVI. Abgerufen am 29. Mai 2019.
  4. a b {{{titel}}}.
  5. Christian Wagenknecht, Michael Hielscher: Formale Sprachen, abstrakte Automaten und Compiler. Lehr- und Arbeitsbuch für Grundstudium und Fortbildung. Springer-Verlag, 2009, ISBN 3-8348-0624-2 (eingeschränkte Vorschau in der Google-Buchsuche).