2010-08-09 10 views
6

Ich bin interessiert zu erfahren, wie der JavaScript-Interpreter (Engine, wenn Sie mögen) funktioniert. Ich bin mir bewusst, dass JavaScript nicht kompiliert wird. Ich habe mir die ECMA-Spezifikation angeschaut, aber es erklärt nicht, wie die eigentliche Engine funktioniert.Wie funktionieren JavaScript-Interpreter/Engines?

Der Hauptgrund, warum ich das frage, ist, weil ich gerne verstehen würde, warum IE7 sich etwas anders verhält als IE8 oder Firefox 3.5+.

Ich vermute, dass bestimmte Funktionsaufrufe in einer anderen Reihenfolge behandelt werden, aber ich würde es gerne wissen.

Ich habe auch einige Videos von Google Talks auf JavaScript-Optimierung zusammen mit dem JavaScript: Good Parts-Video angesehen. Diese berührten das Thema kurz.

Danke

+0

Die ECMA-Spezifikation, wie viele Programmiersprache Spezifikationen, legt die Syntax und Semantik der Sprache, nicht die Umsetzung. Deshalb werden Sie keine "Erklärung" der Javascript-Engine sehen. –

+0

Wenn Sie ein Beispiel dafür geben, was Sie sehen, kann ich erklären, was der Unterschied ist und warum er sich geändert hat. – chuckj

Antwort

1

Wenn Sie mit Low-Level-Sprachen, Blick auf die Quellen von V8 oder TraceMonkey und erforschen sie umgehen können. Es ist ein bisschen schwierig, die Interna der JavaScript-Engines zu verstehen, aber es ist ziemlich interessant.

4

Ich habe genau das gleiche Problem - Execution Contexts in der ECMA-Spezifikation. bietet etwas Obskures! Einblick. Idiosynkrasien sind jedoch auch unter den Versionen einer einzigen Plattform weit verbreitet.

Im Allgemeinen bieten Themen zu Automaten, rekursiver Funktionentheorie, formaler Sprachtheorie und Compilerdesign einen soliden Hintergrund für das "Verstehen" eines Interpreters.

In der Abstraktion, wenn die Semantik erschöpfend gut definiert ist, ohne "Disambiguierung" zu erfordern, dann sind die Ergebnisse der formalen Funktion unabhängig von der Implementierung identisch. In der Praxis gibt es viel Spielraum, wie die Extras wie .toSource() sehen, die eine Engine haben könnte und eine andere nicht.

Stackoverflow ref: What are Gecko's operational semantics?