Разбиране на начина, по който двигателят на Chrome V8 превръща JavaScript в машинен код

Преди да се потопите дълбоко в ядрото на V8 на Chrome, първо, нека свалим нашите основи. Всички наши системи се състоят от микропроцесори, това, което в момента седи във вашия компютър и ви позволява да прочетете това.

Микропроцесорите са малки машини, които работят с електрически сигнали и в крайна сметка си вършат работата. Даваме инструкции на микропроцесорите. Инструкциите са на езика, който микропроцесорите могат да интерпретират. Различните микропроцесори говорят различни езици. Някои от най-често срещаните са IA-32, x86–64, MIPS и ARM. Тези езици взаимодействат директно с хардуера, така че написаният в тях код се нарича машинен код. Кодът, който пишем на нашите компютри, се преобразува или компилира в машинен код.

Ето как изглежда машинният код:

Състои се от инструкции, които се изпълняват на определено парче памет във вашата система на ниско ниво. Трябва да се почувствате късметлия, че не е необходимо да пишете всичко това, за да стартирате програмата си!

Езиците на високо ниво са абстрахирани от машинния език. В нивото на абстракция по-долу можете да видите колко далеч е абстрахиран JavaScript от нивото на машината. C / C ++ са относително много по-близо до хардуера и следователно много по-бързо от другите езици на високо ниво.

Сега да се върнем към V8 двигателя: V8 е мощен Javascript двигател с отворен код, предоставен от Google. И така, какво всъщност е Javascript Engine? Това е програма, която преобразува код на Javascript в по-ниско ниво или машинен код, който микропроцесорите могат да разберат.

Има различни JavaScript двигатели, включително Rhino, JavaScriptCore и SpiderMonkey. Тези двигатели следват стандартите ECMAScript. ECMAScript определя стандарта за скриптовия език. JavaScript се основава на стандартите ECMAScript. Тези стандарти определят как трябва да работи езикът и какви характеристики трябва да има. Можете да научите повече за ECMAScript тук.

Двигателят Chrome V8:

  • Двигателят V8 е написан на C ++ и се използва в Chrome и Nodejs.
  • Той прилага ECMAScript, както е посочено в ECMA-262.
  • Двигателят V8 може да работи самостоятелно, ние можем да го вградим със собствената си програма C ++.

Нека разберем последната точка малко по-добре. V8 може да работи самостоятелно и в същото време можем да добавим собствена реализация на функция в C ++, за да добавим нови функции към JavaScript.

Така например: print('hello world')не е валиден израз в Node.js. Ще даде грешка, ако го компилираме. Но можем да добавим собствено изпълнение на функцията за печат в C ++ върху V8, който е с отворен код в Github, като по този начин функцията за печат работи нормално. Това позволява на JavaScript да разбира повече от това, което стандартът ECMAScript посочва, че JavaScript трябва да разбира.

Това е мощна функция, тъй като C ++ има повече функции като език за програмиране в сравнение с JavaScript, тъй като е много по-близо до хардуера като работа с файлове и папки на твърдия диск.

Разрешаването ни да напишем код в C ++ и предоставянето му на JavaScript го прави, за да можем да добавим повече функции към JavaScript.

Node.js сам по себе си е C ++ реализация на V8 двигател, позволяващ програмиране от страна на сървъра и мрежови приложения.

Нека сега разгледаме някои от отворения код в двигателя. За да направите това, трябва да отидете в папката v8 / sample / shell.cc.

Тук можете да видите внедряването на различни функции като Printи Read,които всъщност не са налични в Node.js.

По-долу можете да видите изпълнението на Printфункцията. Всеки път, когато print()функцията бъде извикана в Node.js, тя ще създаде обратно извикване и функцията ще бъде изпълнена.

По същия начин можем да добавим собствена реализация на различни нови функции в C ++ вътре в V8, което позволява да се разбира от Node.js.

Това със сигурност е твърде много, за да се вземе просто изказване и това е работата, която V8 двигателят върши под капака.

Сега трябва да имате ясно разбиране за това как работи Node.js и какво всъщност е двигателят на Chrome V8.

Благодаря, че прочетохте тази статия. Нека да предприемат последващи действия във Twitter , Linkedin , Github , и Facebook .