Ich würde sagen, Sie sind etwa halb richtig. Wenn Sie die Geschwindigkeit der Interpretation grafisch darstellen, mit dem Sprachlevel auf der X-Achse und der Ausführungsgeschwindigkeit auf der Y-Achse, erhalten Sie eine "Badewannen" -Kurve - die Interpretation einer extrem niedrigen Sprache kann ziemlich schnell sein und eine extrem hohe interpretieren Level-Sprache kann ziemlich schnell sein. Dazwischen ist die Interpretation wesentlich langsamer.
Angesichts einer extrem hohen Eingabesprache (z. B. APL) erhalten Sie einen minimalen Overhead für die Interpretation, da Sie aufgrund der Analyse relativ wenig Eingabecodes viel Arbeit erledigen können.
Im gegenteiligen Extrem kann man ziemlich gute Geschwindigkeit erreichen, einfach weil die Interpretation mit einer ausreichend niedrigen Sprache fast trivial wird. Der innere Interpret einer Forth-Implementierung ist ein Paradebeispiel dafür. Diese stellen oft ein gegebenes Programm ziemlich kompakt dar, was tendenziell ziemlich cachefreundlich ist, so dass man zumindest in der Theorie eine Ausführung erreichen könnte, die so schnell (oder sogar etwas schneller) ist als reiner Maschinencode.
Die ursprüngliche Absicht war, dass die meisten JVMs, die .NET "gemanagte" Umgebung, Smalltalk-Bytecode-Interpreter usw. zu dem letzteren Fall passen würden. Wie die meisten, die versucht haben, diese zu entwickeln, schnell gefunden haben, ist es hart, um den Dolmetschaufwand niedrig genug zu halten, um dies zu erreichen. Jeder, den ich kenne, der in diese Klasse passt, hat die innere Schleife in Assemblersprache von Hand geschrieben und normalerweise von einem guten Assemblerprogrammierer.Ich würde fast so weit gehen zu sagen, dass, wenn Sie versuchen, eine höhere Sprache (sogar C) zu verwenden, es langsamer sein wird, und wahrscheinlich auch erheblich (wenn Sie zusätzlich alle Eingabeanweisung hinzufügen, sogar eine zusätzliche Anweisung in der inneren Schleife wird fast sicher zu einer messbaren Geschwindigkeitsstrafe führen).
Geez, tun so viele Leute nicht die Frage hier lesen? meine Güte. OP vergleicht nicht mit kompilierten Sprachen. OP vergleicht hochrangige interpretierte Sprachen mit niederrangigen INTERPRETIERTEN Sprachen .... –
@Brian: Wie die folgende Diskussion zeigt, ist die Unterscheidung zwischen * kompiliert * und * interpretiert * offenbar nicht so eindeutig, wie es auf den ersten Blick scheinen mag . –
@Robert: Wie so? Eine kompilierte Sprache ist eine Sprache, die zur Assembly der Maschine kompiliert wird, auf der sie ausgeführt wird. Eine interpretierte Sprache ist eine Sprache, die einem Interpreter zugeführt wird und in einer Art virtueller Maschine läuft. Java ist weder. Java wird in eine intermediierte Sprache übersetzt. –