Forståelse af, hvordan Chrome V8-motoren oversætter JavaScript til maskinkode

Før vi dykker dybt ned i kernen i Chrome's V8, lad os først få vores grundlæggende ned. Alle vores systemer består af mikroprocessorer, den ting der sidder inde i din computer lige nu og giver dig mulighed for at læse dette.

Mikroprocessorer er små maskiner, der arbejder med elektriske signaler og i sidste ende gør jobbet. Vi giver mikroprocessorer instruktionerne. Instruktionerne er på det sprog, som mikroprocessorer kan fortolke. Forskellige mikroprocessorer taler forskellige sprog. Nogle af de mest almindelige er IA-32, x86–64, MIPS og ARM. Disse sprog interagerer direkte med hardwaren, så koden skrevet i dem kaldes maskinkode. Kode, som vi skriver på vores computere, konverteres eller kompileres til maskinkode.

Sådan ser maskinkoden ud:

Den består af instruktioner, der udføres på et bestemt stykke hukommelse i dit system på et lavt niveau. Du skal føle dig heldig for ikke at skulle skrive alt dette for at køre dit program!

Sprog på højt niveau er abstraheret fra maskinsprog. I abstraktionsniveauet nedenfor kan du se, hvor langt JavaScript er abstraheret fra maskinniveauet. C / C ++ er relativt meget tættere på hardwaren og dermed meget hurtigere end andre sprog på højt niveau.

Nu tilbage til V8-motoren: V8 er en kraftfuld open source Javascript-motor leveret af Google. Så hvad er egentlig en Javascript Engine? Det er et program, der konverterer Javascript-kode til lavere niveau eller maskinkode, som mikroprocessorer kan forstå.

Der er forskellige JavaScript-motorer, herunder Rhino, JavaScriptCore og SpiderMonkey. Disse motorer følger ECMAScript-standarderne. ECMAScript definerer standarden for skriptsproget. JavaScript er baseret på ECMAScript-standarder. Disse standarder definerer, hvordan sproget skal fungere, og hvilke funktioner det skal have. Du kan lære mere om ECMAScript her.

Chrome V8-motoren:

  • V8-motoren er skrevet i C ++ og bruges i Chrome og Nodejs.
  • Det implementerer ECMAScript som specificeret i ECMA-262.
  • V8-motoren kan køre enkeltstående, så vi kan integrere den med vores eget C ++ - program.

Lad os forstå det sidste punkt lidt bedre. V8 kan køre uafhængig, og på samme tid kan vi tilføje vores egen funktion implementering i C ++ for at tilføje nye funktioner til JavaScript.

Så for eksempel: print('hello world')er ikke en gyldig erklæring i Node.js. Det vil give fejl, hvis vi kompilerer det. Men vi kan tilføje vores egen implementering af udskrivningsfunktionen i C ++ oven på V8, som er open source på Github, hvilket får udskrivningsfunktionen til at fungere indbygget. Dette gør det muligt for JavaScript at forstå mere end hvad ECMAScript-standarden specificerer, at JavaScript skal forstå.

Dette er en stærk funktion, da C ++ har flere funktioner som programmeringssprog sammenlignet med JavaScript, da det er meget tættere på hardware som at håndtere filer og mapper på harddisken.

Hvis vi tillader os at skrive kode i C ++ og gør den tilgængelig for JavaScript, gør den det, så vi kan tilføje flere funktioner til JavaScript.

Node.js er i sig selv en C ++ implementering af en V8-motor, der tillader programmering og netværksapplikationer på serversiden.

Lad os nu se på nogle af open source-koden inde i motoren. For at gøre dette skal du gå til mappen v8 / samples / shell.cc.

Her kan du se implementeringen af ​​forskellige funktioner, som Printog Read,som ikke er tilgængelige i Node.js.

Nedenfor kan du se implementeringen af Printfunktionen. Hver gang print()funktionen påberåbes i Node.js, opretter den et tilbagekald, og funktionen udføres.

På samme måde kan vi tilføje vores egen implementering af forskellige nye funktioner i C ++ inde i V8, så det kan forstås af Node.js.

Det er bestemt for meget at få fat i for en simpel erklæring, og det er den mængde arbejde, V8-motoren gør under motorhjelmen.

Nu skal du have en klar forståelse af, hvordan Node.js fungerer, og hvad der faktisk er Chrome V8-motoren.

Tak, fordi du læste denne artikel. Lad os følge op på Twitter , Linkedin , Github , og Facebook .