Zrozumienie, w jaki sposób silnik Chrome V8 tłumaczy JavaScript na kod maszynowy

Zanim zagłębimy się w rdzeń Chrome V8, najpierw zapoznajmy się z podstawami. Wszystkie nasze systemy składają się z mikroprocesorów, czyli czegoś, co znajduje się teraz w Twoim komputerze i pozwala Ci to przeczytać.

Mikroprocesory to małe maszyny, które pracują z sygnałami elektrycznymi i ostatecznie wykonują swoją pracę. Dajemy instrukcje mikroprocesorom. Instrukcje są w języku, który mikroprocesory mogą interpretować. Różne mikroprocesory mówią różnymi językami. Niektóre z najpopularniejszych to IA-32, x86–64, MIPS i ARM. Języki te bezpośrednio współdziałają ze sprzętem, więc napisany w nich kod nazywany jest kodem maszynowym. Kod, który piszemy na naszych komputerach, jest konwertowany lub kompilowany na kod maszynowy.

Tak wygląda kod maszynowy:

Składa się z instrukcji wykonywanych na niskim poziomie na określonym fragmencie pamięci w systemie. Musisz czuć się szczęśliwy, że nie musisz pisać tego wszystkiego, aby uruchomić swój program!

Języki wysokiego poziomu są wyodrębnione z języka maszynowego. Na poniższym poziomie abstrakcji możesz zobaczyć, jak daleko JavaScript jest wyodrębniony z poziomu maszyny. C / C ++ są stosunkowo bliżej sprzętu, a zatem znacznie szybsze niż inne języki wysokiego poziomu.

Wróćmy teraz do silnika V8: V8 to potężny silnik Javascript typu open source dostarczany przez Google. Czym właściwie jest silnik JavaScript? Jest to program, który konwertuje kod JavaScript na kod niższego poziomu lub kod maszynowy zrozumiały dla mikroprocesorów.

Istnieją różne silniki JavaScript, w tym Rhino, JavaScriptCore i SpiderMonkey. Silniki te są zgodne ze standardami ECMAScript. ECMAScript definiuje standard dla języka skryptowego. JavaScript jest oparty na standardach ECMAScript. Standardy te określają, jak język powinien działać i jakie cechy powinien mieć. Możesz dowiedzieć się więcej o ECMAScript tutaj.

Silnik Chrome V8:

  • Silnik V8 jest napisany w C ++ i używany w Chrome i Nodejs.
  • Implementuje ECMAScript, jak określono w ECMA-262.
  • Silnik V8 może działać samodzielnie, możemy go osadzić w naszym własnym programie C ++.

Zrozummy trochę lepiej ostatni punkt. V8 może działać samodzielnie, a jednocześnie możemy dodać własną implementację funkcji w C ++, aby dodać nowe funkcje do JavaScript.

Na przykład: print('hello world')nie jest prawidłową instrukcją w Node.js. Skompilujemy błąd. Ale możemy dodać własną implementację funkcji print w C ++ do V8, która jest open source na Github, dzięki czemu funkcja drukowania działa natywnie. Dzięki temu JavaScript może zrozumieć więcej niż to, co standard ECMAScript określa, że ​​JavaScript powinien rozumieć.

Jest to potężna funkcja, ponieważ C ++ ma więcej funkcji jako język programowania w porównaniu z JavaScript, ponieważ jest znacznie bliższy sprzętowi, takim jak obsługa plików i folderów na dysku twardym.

Umożliwienie nam pisania kodu w C ++ i udostępnienie go JavaScriptowi sprawia, że ​​możemy dodać więcej funkcji do JavaScript.

Sam Node.js jest implementacją C ++ silnika V8, umożliwiającą programowanie po stronie serwera i aplikacje sieciowe.

Przyjrzyjmy się teraz niektórym otwartym kodom źródłowym w silniku. Aby to zrobić, musisz przejść do folderu v8 / samples / shell.cc.

Tutaj możesz zobaczyć implementację różnych funkcji, takich jak Printi, Read,które są natywnie niedostępne w Node.js.

Poniżej możesz zobaczyć implementację Printfunkcji. Za każdym razem, gdy print()funkcja jest wywoływana w Node.js, utworzy wywołanie zwrotne i funkcja zostanie wykonana.

Podobnie, możemy dodać własną implementację różnych nowych funkcji w C ++ wewnątrz V8, dzięki czemu będzie to zrozumiałe dla Node.js.

To z pewnością zbyt wiele, by sięgnąć po proste stwierdzenie, a tyle pracy wykonuje silnik V8 pod maską.

Teraz musisz dokładnie zrozumieć, jak działa Node.js i czym właściwie jest silnik Chrome V8.

Dziękuję za przeczytanie tego artykułu. Prześledźmy się na Twitter , Linkedin , Github , i Facebook .