Limite Nodejs C++/JS : franchir le Rubicon

Blog

Limite Nodejs C++/JS : franchir le Rubicon

Limite Nodejs C++/JS : franchir le Rubicon

La plupart des articles sur les internes de Nodejs parlent toujours de la frontière C++/JS et de son franchissement en quelque sorte. Mais la plupart ne vont généralement pas en profondeur pour expliquer ce que franchir la frontière C++/JS vraiment signifié et de quelle traversée il s'agit.



Dans cet article, nous examinerons en profondeur les Limite C++/JS savoir quoi |_+_| cela implique.

Ce que nous allons gagner de cet article : Node.js alimente plus d'un million de startups et d'entreprises. C'est le framework backend le plus utilisé. Nous l'utilisons tous les jours. Les développeurs possédant les compétences de Node.js sont très demandés. Par conséquent, apprendre en profondeur le fonctionnement de Node.js contribuera grandement à élargir notre horizon sur Nodejs et à être confiant lors de la création d'applications Nodejs.



C++/JS : La frontière entre deux mondes

Tout commence avec le compilateur.

D'abord, qu'est-ce qu'un compilateur ?



Un compilateur est un programme qui traduit un morceau de code en code machine.

Super!! |_+_|. Rappelez-vous cela.

comment acheter chez kucoin

Les compilateurs sont des programmes complexes, ils sont décomposés en parties, chaque partie a un travail spécifique.

crossing

analyseur lexical : Cela génère des jetons à partir du code source.

analyseur : Cela génère un arbre AST (Abstract Syntax Tree) à partir des jetons.

génération de code : Cela génère du code machine/assembly à partir de l'AST.

La plupart des compilateurs génèrent l'équivalent assembleur du code source et laissent l'assembleur écraser le tout dans une soupe binaire.

Nodejs utilise le moteur JS v8 pour compiler et exécuter le code JS. J'espère que nous savons ce qu'est la v8.

si nous ne le faisons pas, v8 est un compilateur JavaScript hautes performances open source de Google.

Chaque fois que nous exécutons un fichier js dans Node.js comme ceci :

into machine code

Nodejs transmet le script à la v8 à l'aide de ses API. v8 compile le code JS dans le script fourni (script.js) et renvoie l'équivalent assembleur. Node.js utilise ensuite une autre API v8 pour exécuter le code d'assemblage généré.

Le compilateur compile le code en assembleur et le copie en mémoire.

C'est le titre de l'image

record du monde de compteur de barre d'espace

En regardant l'image ci-dessus, le code JS est compilé en code assembleur.

Pour exécuter le code compilé, il alloue un espace sur la mémoire, déplace le code vers l'espace alloué et saute vers l'espace mémoire.

Au saut, l'exécution commence maintenant à partir du code compilé. Par conséquent, il a franchi une frontière.

Le code en cours d'exécution n'est pas un code C++ mais du code JS. Tous sont maintenant assemblés.

Si l'exécution du code JS compilé se termine, il revient au code C++.

trouver des lignes en double pandas

Le code C++ et le code JS ici ne signifient pas le code source C++ ou le code source JS. Non. C'est le code assembleur généré à partir de leurs codes sources par le compilateur qui est exécuté. Vous pouvez dire du code C++ et du code JS pour différencier le code assembleur en cours d'exécution.

Appel de JS vers C++

Les fonctions du code source C++ peuvent être appelées à partir d'un code JS.

Exemple:

source code | v lexical analyzer | v parser | v code generation

Dans ce code, nous avons défini |_+_| fonction mais il n'y a pas de |_+_| fonction.

Le |_+_| La fonction sera définie dans notre application C++ :

node script.js

Noter : les extraits ci-dessus ne fonctionneront pas. C'est juste à des fins de démonstration.

Ici, nous avons le |_+_| fonction.

Voir ce qui se passe. A l'exécution, notre |_+_| fonctionne comme ceci :

// script.js let f = 90 function send() { var f= 100 } send() sendMe()

voir la fonction sendMe est présente. L'exécution commence à partir du principal et se poursuit vers le bas. Sur |_+_|, le |_+_| est compilé et mis en mémoire.

send

Voir nos |_+_| code assembleur en mémoire. :) Ici, il n'y a pas de code C++ ou JS. Tout est en assemblage. Comme je l'ai dit plus tôt, nous pouvons simplement délimiter comme, voici le code d'assemblage du script C++ et voici le code d'assemblage du script JS.

Donc, quand |_+_| |_+_| est exécuté,

sendMe

il passe à l'espace mémoire du code assembleur JS |_+_|.

Télécharger le film Mortal Kombat 2021

Noter: Run est une API v8 pour exécuter le code JS compilé après la compilation.

sendMe

Ici, le code que nous avons écrit dans script.js est exécuté sous forme d'assemblage.

connexion à la messagerie Web at&t yahoo

Lorsque l'exécution atteint |_+_|, elle passe à |_+_| et exécute son bloc, après cela, il retourne et appelle |_+_|.

// v8_demo.cpp include 'v8.h'; void sendMe() { cout << 'Greetings from C++ land'; } int main() { Maybe result = v8::Script::Compile('script.js'); result->Run(); }

Cette fonction n'a pas été définie dans notre |_+_|, mais comme elle a été définie dans |_+_|, elle est désormais disponible en mémoire. Il peut être appelé car la forme d'assemblage de |_+_| et |_+_|, s'exécute désormais dans un seul langage et dans le même espace mémoire.

Ainsi, l'exécution saute à |_+_|, le début du |_+_| fonction.

sendMe

:) |_+_| est affiché !!

Ainsi, ce type de saut s'appelle |_+_|.

De même, l'appel de C++ à JS est possible, à condition que la fonction soit définie dans JS land.

Conclusion

Vous voyez, c'est assez simple, pas de magie, pas grave. Chaque fois que vous entendez |_+_|, imaginez toujours tout ce qui s'exécute en assembleur et dans le même espace mémoire.

Dans nos prochains articles, nous plongerons en profondeur pour voir comment certaines des principales API Node.js fonctionnent en dessous :

  • setTimeout
  • process.nextTick
  • setImmédiat
  • Promesse
  • setInterval

Si vous avez des questions concernant ceci ou quoi que ce soit que je devrais ajouter, corriger ou supprimer, n'hésitez pas à commenter, m'envoyer un e-mail ou un DM. Merci !!!

#nodejs #javascript #programmation