Für Code wie A = A + B
diesen können bis zu ein oder zwei Maschinenbefehle kompiliert werden, die jeweils eine bestimmte Anzahl von Zyklen benötigen. Kein Dolmetscher kann aus einem einfachen Grund in dieser Anzahl von Zyklen dasselbe tun.
Der Interpreter führt auch einen eigenen Befehlssatz aus (nennt sie Byte-Codes, p-Codes, Zwischensprache, was auch immer). Jedes Mal, wenn es einen Byte-Code wie ADD sieht, muss es ihn irgendwie nachschlagen und zu dem Code verzweigen, der den Zusatz ausführt.
Wenn es das nächste Mal angezeigt wird, muss es diese Suche wiederholen , es sei denn, es kann sich an die vorherige Suche erinnern. Wenn es eine Möglichkeit gibt, sich an die vorherige Suche zu erinnern, handelt es sich nicht mehr um einen "Interpreter", sondern um einen Just-in-Time-Compiler oder JITter.
Auf der anderen Seite...
Für Code wie callSomeFunction( ... some args ...)
, wie viele Zyklen werden zwischen der Eingabe und dem Verlassen des Codes verbracht? Es hängt alles davon ab, was im Inneren passiert callSomeFunction
. Es könnten ein paar sein, und es könnten Billionen sein, selbst wenn sie callSomeFunction
selbst zusammengestellt sind. Wenn es viel ist, hat es keinen Sinn, die Interpretationskosten dieser Codezeile zu diskutieren - das Geld ist woanders.
Denken Sie daran, dass interpretierte Sprachen einen eigenen Wert haben, z. B. dass sie nicht kompiliert werden müssen. (Die "Kompilierung" der Oberflächensyntax in Byte-Codes nimmt triviale Zeit in Anspruch. Nehmen Sie beispielsweise R oder MATLAB.)
Auch für intelligente Programmierebenen ist Flexibilität erforderlich. In Minskys Society of Mind , Kapitel 6.4 B- Brains, gibt es A-Programme, die sich mit der Welt befassen, und es gibt B-Programme, die sich mit A-Programmen befassen, und es kann weitere Ebenen geben. Programme, die andere Programme schreiben und verwalten, können in interpretierenden Systemen einfacher ausgeführt werden.
In Lisp können Sie schreiben (+ A B)
, um A und B hinzuzufügen, aber sobald es geschrieben ist, haben Sie nur die Wahl, ob Sie es ausführen möchten oder nicht. Sie können auch schreiben, (eval (list '+ 'A 'B))
was das Programm erstellt und dann ausführt. Es könnte etwas anderes konstruieren.
Das Thema des Programms ist ein anderes Programm . Dies ist einfacher in einer interpretierten Sprache zu schreiben (Jörg weist jedoch darauf hin, dass neuere Versionen von Lisp zwar im eval
Handumdrehen kompiliert werden können, sie also nicht die Geschwindigkeitsstrafe eines Dolmetschers haben).