Verstehen, wie die Chrome V8 Engine JavaScript in Maschinencode übersetzt

Bevor wir tief in den Kern von Chrome V8 eintauchen, wollen wir zunächst unsere Grundlagen erläutern. Alle unsere Systeme bestehen aus Mikroprozessoren, die sich gerade in Ihrem Computer befinden und es Ihnen ermöglichen, diese zu lesen.

Mikroprozessoren sind winzige Maschinen, die mit elektrischen Signalen arbeiten und letztendlich die Arbeit erledigen. Wir geben Mikroprozessoren die Anweisungen. Die Anweisungen sind in der Sprache, die Mikroprozessoren interpretieren können. Verschiedene Mikroprozessoren sprechen verschiedene Sprachen. Einige der häufigsten sind IA-32, x86–64, MIPS und ARM. Diese Sprachen interagieren direkt mit der Hardware, sodass der in ihnen geschriebene Code als Maschinencode bezeichnet wird. Code, den wir auf unseren Computern schreiben, wird in Maschinencode konvertiert oder kompiliert.

So sieht Maschinencode aus:

Es besteht aus Anweisungen, die an einem bestimmten Speicherplatz in Ihrem System auf einer niedrigen Ebene ausgeführt werden. Sie müssen sich glücklich schätzen, dass Sie nicht alles schreiben müssen, um Ihr Programm auszuführen!

Hochsprachen werden von der Maschinensprache abstrahiert. In der folgenden Abstraktionsebene können Sie sehen, wie weit JavaScript von der Maschinenebene abstrahiert ist. C / C ++ sind relativ viel näher an der Hardware und daher viel schneller als andere Hochsprachen.

Zurück zur V8-Engine: V8 ist eine leistungsstarke Open-Source-Javascript-Engine von Google. Was ist eigentlich eine Javascript Engine? Es ist ein Programm, das Javascript-Code in Code niedrigerer Ebene oder Maschinencode konvertiert, den Mikroprozessoren verstehen können.

Es gibt verschiedene JavaScript-Engines, darunter Rhino, JavaScriptCore und SpiderMonkey. Diese Engines folgen den ECMAScript-Standards. ECMAScript definiert den Standard für die Skriptsprache. JavaScript basiert auf ECMAScript-Standards. Diese Standards definieren, wie die Sprache funktionieren soll und welche Funktionen sie haben soll. Weitere Informationen zu ECMAScript finden Sie hier.

Der Chrome V8 Motor:

  • Die V8-Engine ist in C ++ geschrieben und wird in Chrome und Nodejs verwendet.
  • Es implementiert ECMAScript wie in ECMA-262 angegeben.
  • Die V8-Engine kann eigenständig ausgeführt werden. Wir können sie in unser eigenes C ++ - Programm einbetten.

Lassen Sie uns den letzten Punkt etwas besser verstehen. V8 kann eigenständig ausgeführt werden und gleichzeitig können wir unsere eigene Funktionsimplementierung in C ++ hinzufügen, um JavaScript neue Funktionen hinzuzufügen.

Also zum Beispiel: print('hello world')ist keine gültige Anweisung in Node.js. Es wird einen Fehler geben, wenn wir es kompilieren. Wir können jedoch unsere eigene Implementierung der Druckfunktion in C ++ zusätzlich zu V8 hinzufügen, das bei Github Open Source ist, sodass die Druckfunktion nativ funktioniert. Dadurch kann das JavaScript mehr verstehen, als der ECMAScript-Standard vorschreibt, den das JavaScript verstehen sollte.

Dies ist eine leistungsstarke Funktion, da C ++ im Vergleich zu JavaScript mehr Funktionen als Programmiersprache bietet, da es der Hardware wie dem Umgang mit Dateien und Ordnern auf der Festplatte viel näher kommt.

Wenn wir Code in C ++ schreiben und für JavaScript verfügbar machen können, können wir JavaScript um weitere Funktionen erweitern.

Node.js an sich ist eine C ++ - Implementierung einer V8-Engine, die serverseitige Programmier- und Netzwerkanwendungen ermöglicht.

Schauen wir uns nun einen Teil des Open Source-Codes in der Engine an. Dazu müssen Sie in den Ordner v8 / samples / shell.cc wechseln.

Hier sehen Sie die Implementierung verschiedener Funktionen wie Printund, Read,die in Node.js nativ nicht verfügbar sind.

Unten sehen Sie die Implementierung der PrintFunktion. Immer wenn die print()Funktion in Node.js aufgerufen wird, wird ein Rückruf erstellt und die Funktion ausgeführt.

In ähnlicher Weise können wir unsere eigene Implementierung verschiedener neuer Funktionen in C ++ in V8 hinzufügen, damit Node.js sie verstehen kann.

Das ist sicherlich zu viel für eine einfache Aussage und das ist die Menge an Arbeit, die der V8-Motor unter der Haube leistet.

Jetzt müssen Sie ein klares Verständnis dafür haben, wie Node.js funktioniert und was eigentlich die Chrome V8-Engine ist.

Vielen Dank für das Lesen dieses Artikels. Lassen Sie uns folgen auf Twitter , Linkedin , Github , und Facebook .