Comprendre comment le moteur Chrome V8 traduit JavaScript en code machine

Avant de plonger profondément dans le cœur du V8 de Chrome, commençons par examiner nos principes fondamentaux. Tous nos systèmes sont constitués de microprocesseurs, ce qui se trouve actuellement à l'intérieur de votre ordinateur et vous permet de lire ceci.

Les microprocesseurs sont de minuscules machines qui fonctionnent avec des signaux électriques et font finalement le travail. Nous donnons les instructions aux microprocesseurs. Les instructions sont dans le langage que les microprocesseurs peuvent interpréter. Différents microprocesseurs parlent différentes langues. Certains des plus courants sont IA-32, x86–64, MIPS et ARM. Ces langages interagissent directement avec le matériel de sorte que le code qui y est écrit est appelé code machine. Le code que nous écrivons sur nos ordinateurs est converti ou compilé en code machine.

Voilà à quoi ressemble le code machine:

Il se compose d'instructions qui sont exécutées sur une mémoire particulière de votre système à un niveau bas. Vous devez vous sentir chanceux de ne pas avoir à écrire tout cela pour exécuter votre programme!

Les langages de haut niveau sont extraits du langage machine. Dans le niveau d'abstraction ci-dessous, vous pouvez voir dans quelle mesure JavaScript est extrait du niveau de la machine. C / C ++ sont relativement beaucoup plus proches du matériel et donc beaucoup plus rapides que les autres langages de haut niveau.

Revenons maintenant au moteur V8: V8 est un puissant moteur Javascript open source fourni par Google. Alors, qu'est-ce qu'un moteur Javascript? C'est un programme qui convertit le code Javascript en code machine ou de niveau inférieur que les microprocesseurs peuvent comprendre.

Il existe différents moteurs JavaScript, notamment Rhino, JavaScriptCore et SpiderMonkey. Ces moteurs suivent les normes ECMAScript. ECMAScript définit la norme pour le langage de script. JavaScript est basé sur les normes ECMAScript. Ces normes définissent comment la langue doit fonctionner et quelles fonctionnalités elle doit avoir. Vous pouvez en savoir plus sur ECMAScript ici.

Le moteur Chrome V8:

  • Le moteur V8 est écrit en C ++ et utilisé dans Chrome et Nodejs.
  • Il implémente ECMAScript comme spécifié dans ECMA-262.
  • Le moteur V8 peut fonctionner de manière autonome, nous pouvons l'intégrer avec notre propre programme C ++.

Comprenons un peu mieux le dernier point. V8 peut fonctionner de manière autonome et en même temps, nous pouvons ajouter notre propre implémentation de fonction en C ++ pour ajouter de nouvelles fonctionnalités à JavaScript.

Par exemple: print('hello world')n'est pas une instruction valide dans Node.js. Cela donnera une erreur si nous le compilons. Mais nous pouvons ajouter notre propre implémentation de la fonction d'impression en C ++ au-dessus du V8 qui est open source chez Github, faisant ainsi fonctionner la fonction d'impression de manière native. Cela permet au JavaScript de comprendre plus que ce que la norme ECMAScript spécifie que le JavaScript doit comprendre.

Il s'agit d'une fonctionnalité puissante car C ++ a plus de fonctionnalités en tant que langage de programmation que JavaScript, car il est beaucoup plus proche du matériel, comme le traitement des fichiers et des dossiers sur le disque dur.

Nous permettre d'écrire du code en C ++ et de le rendre disponible pour JavaScript nous permet d'ajouter plus de fonctionnalités à JavaScript.

Node.js en lui-même est une implémentation C ++ d'un moteur V8 permettant la programmation côté serveur et les applications de mise en réseau.

Regardons maintenant une partie du code open source à l'intérieur du moteur. Pour ce faire, vous devez aller dans le dossier v8 / samples / shell.cc.

Ici, vous pouvez voir l'implémentation de différentes fonctions telles que Printet Read,qui ne sont pas disponibles nativement dans Node.js.

Ci-dessous, vous pouvez voir l'implémentation de la Printfonction. Chaque fois que la print()fonction est appelée dans Node.js, elle créera un rappel et la fonction sera exécutée.

De même, nous pouvons ajouter notre propre implémentation de différentes nouvelles fonctions en C ++ à l'intérieur de V8, ce qui permet de la comprendre par Node.js.

C'est certainement trop à saisir pour une simple déclaration et c'est la quantité de travail que le moteur V8 fait sous le capot.

Vous devez maintenant avoir une compréhension claire du fonctionnement de Node.js et de ce qu'est réellement le moteur Chrome V8.

Merci d'avoir lu cet article. Suivons sur Twitter , Linkedin , Github , et Facebook .