Was ist der Unterschied zwischen JavaScript-Engine und die JavaScript-Laufzeit-Umgebung
Ich fühle mich ein bisschen verwirrt, kann mir da jemand helfen, zu beschreiben, Was der Unterschied zwischen JavaScript-Engine und die JavaScript-Laufzeit-Umgebung.
BTW, Ereignis-Schleife implementiert, die den Motor oder die Laufzeit?
InformationsquelleAutor der Frage clark | 2015-03-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anders als in C und anderen Programmiersprachen, die kompiliert, Javascript läuft in einem container - Programm, das liest die js-codes und führt Sie aus. Dieses Programm muss zwei Dinge tun
Den ersten Teil als Motor und die zweite ist die Laufzeit.
Beispielsweise den Chrome-Browser und node.js mit dem gleichen Motor - V8, aber Ihre Laufzeiten sind unterschiedlich: in Chrome müssen Sie die
window
-, DOM-Objekte, etc, während Knoten gibt Sierequire
-, Puffer-und Prozesse.InformationsquelleAutor der Antwort georg
Lassen Sie uns zunächst vorstellen, ein Ahead-Of-Time kompiliert Implementierung von JavaScript.
Den compiler wird JavaScript-code zu übersetzen, zum Beispiel, native x86-Maschinen-code, die Sie ausführen können. Es gibt jedoch einige Dinge, die in JavaScript, das passiert zur Laufzeit und können daher nicht statisch kompiliert werden. Garbage Collection, zum Beispiel, oder Reflexion. Also, um für das Programm zu laufen, es brauchen, um irgendeine Art von support-services zur Laufzeit, wie der garbage collector und die Reflexion system. Auch hat JavaScript
eval
was bedeutet, dass (in unserem hypothetischen zusammengestellt Umsetzung) der compiler selbst oder eine andere interpreter muss verfügbar sein, zur Laufzeit.Nennen wir diese Dinge - Laufzeit-Support-Services.
Eine zweite Sache, die muss für das Programm verfügbar ist, sind Objekte wie
Array
Function
Object
usw. und Funktionen wieforEach
. Diese Sammlung von Objekten und Funktionen, die verfügbar sein muss, um das Programm aus der get-go, ist in der Regel sogenannte Core-Bibliothek oder Basis-Bibliothek. Für eine Sprache wie JavaScript, die entworfen wurde, um eingebettet werden, es gibt auch zusätzliche Bibliotheken, die angenommen werden anwesend sein, je nach Kontext. Zum Beispiel für JavaScript, eingebettet in einem browser erwarten wir, dass die DOM-Objekte und-Funktionen und der globalenwindow
unddocument
Objekte und so weiter zu existieren. Diese kann als Teil der core-library auch.Und zu guter Letzt, lassen Sie uns nun vergessen, unsere hypothetische compiler und ein interpreter oder JIT-compiler oder mixed-mode-Motor oder bytecode-VM). Hier die Dolmetscher (oder JIT-Compiler oder was auch immer) ist das Dritte Stück des Puzzles. Es ist die Sache, die eigentlich führt den JavaScript-Programm. (Naja, technisch gesehen, ein JIT nicht ausgeführt wird, kompiliert, und dann etwas anderes ausführt.)
Die Terminologie ist nicht 100% klar: manchmal, nur das Runtime-Support-Services sind die so genannten Runtime Environmentmanchmal werden die Core-Bibliothek ist ebenfalls enthalten.
Execution Engine bezieht sich entweder nur der interpreter (JIT, VM, ...) oder die Kombination von interpreter und-Laufzeit-Umgebung. Ein compiler wird niemals aufgerufen, eine Execution Engine (es wird nicht ausgeführt, nichts, nur übersetzt in eine andere Sprache), und der Begriff Execution Engine wird selten verwendet, um auf eine statisch kompilierte Implementierung.
Die Ereignis-Schleife ist Teil der host-Umgebung, nicht die JavaScript-Implementierung.
InformationsquelleAutor der Antwort Jörg W Mittag
Sich vorstellen, einen Roboter spielt, Musik:
Sich vorstellen, einen Roboter setzen, ein Feuer:
InformationsquelleAutor der Antwort Luo Jiong Hui