• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kompilacja kodu JavaScript

Object Storage Arubacloud
+2 głosów
4,130 wizyt
pytanie zadane 16 stycznia 2018 w JavaScript przez Artek Stary wyjadacz (11,800 p.)
Jak wiadomo, wbrew powszechnemu przekonaniu JavaScript nie jest językiem skryptowym tylko kompilowanym. Czytam sobie książkę i napisano tam, że kompilator generuje kod dla silnika. Czyli mam rozumieć, że kompilator JavaScript nie zamienia pliku tekstowego na kod maszynowy(zrozumiały dla procesora) tak jak np. kompilator dla języka C++ tylko działa to na takiej zasadzie jak w przypadku języka Java(powstaje tzw. bytecode dla wirtualnej maszyny, który jest przez nią wykonywany)?

Jeśli tak to silnik JavaScript też obsługuje "bytecode"? Jak to poprawnie nazwać?

Czy kompilator JS i zakres to podzespoły silnika czy może osobne programy?

2 odpowiedzi

+3 głosów
odpowiedź 16 stycznia 2018 przez Comandeer Guru (601,450 p.)

W przypadku V8 kompilator jest silnikiem JS – nic więcej tam nie ma. W przypadku innych przeglądarek kompilator jest częścią silnika JS, obok interpretera. Nie można zatem powiedzieć, że JS jest językiem kompilowanym, bo nie jest kompilowany zawsze i w każdej przeglądarce.

W przypadku V8 JS jest kompilowany bezpośrednio do kodu maszynowego, z pominięciem bytecode. W innych silnikach AFAIR bytecode może wystąpić.

No i podstawowy błąd: nie ma jednego silnika JS. Jest wiele najprzeróżniejszych implementacji.

komentarz 16 stycznia 2018 przez Artek Stary wyjadacz (11,800 p.)

W przypadku V8 kompilator jest silnikiem JS – nic więcej tam nie ma.

Aha, czyli w przypadku wspomnianego silnika v8 kod JavaScript jest od razu zamieniany na kod maszynowy(zrozumiały dla procesora) czyli taka sama sytuacja jak w tradycyjnych językach kompilowanych(oczywiście z tą różnicą, że np. program w C++ jest kompilowany dużo wcześniej natomiast kod JS nie ma takiego luksusu)

W przypadku innych przeglądarek kompilator jest częścią silnika JS, obok interpretera

A interpreter zajmuje się interpretowanie bytecodu, tak?

 No i podstawowy błąd: nie ma jednego silnika JS. Jest wiele najprzeróżniejszych implementacji.

O.K dobrze wiedzieć. 

komentarz 16 stycznia 2018 przez Comandeer Guru (601,450 p.)

oczywiście z tą różnicą, że np. program w C++ jest kompilowany dużo wcześniej natomiast kod JS nie ma takiego luksusu

No nie do końca. Np. silnik Firefoksa (OdinMonkey, o ile mnie pamięć nie myli) oprócz kompilatora JiT ma także kompilator AoT, który uruchamia dla specjalnego subsetu JS, asm.js.

A interpreter zajmuje się interpretowanie bytecodu, tak?

W sumie to polecałbym poszukać np. dokumentacji SpiderMonkey (silnika Fx), żeby dokładnie się zapoznać, jak to działa. 

komentarz 17 stycznia 2018 przez Artek Stary wyjadacz (11,800 p.)

Odnośnie silnika v8. Napisałeś

W przypadku V8 JS jest kompilowany bezpośrednio do kodu maszynowego, z pominięciem bytecode.

Znalazłem takie informacje 

 Understanding V8’s Bytecode

When V8 compiles JavaScript code, the parser generates an abstract syntax tree. A syntax tree is a tree representation of the syntactic structure of the JavaScript code. Ignition, the interpreter, generates bytecode from this syntax tree. TurboFan, the optimizing compiler, eventually takes the bytecode and generates optimized machine code from it.

 https://medium.com/dailyjs/understanding-v8s-bytecode-317d46c94775

To ja tu czegoś nie rozumiem, czy ktoś się pomylił?

komentarz 17 stycznia 2018 przez Comandeer Guru (601,450 p.)
Hmm, widać V8 dochrapał się interpretera w 2016 → https://v8project.blogspot.com/2016/08/firing-up-ignition-interpreter.html

Niemniej wcześniej V8 działał dokładnie tak, jak opisywałem.
komentarz 17 stycznia 2018 przez Artek Stary wyjadacz (11,800 p.)
Spoko, dziękuję za wyjaśnienia.
0 głosów
odpowiedź 16 stycznia 2018 przez Artek Stary wyjadacz (11,800 p.)
Fajnie, że dostałem upvote jednak prosiłbym o udzielenie odpowiedzi w języku polskim :)

Podobne pytania

0 głosów
2 odpowiedzi 204 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez kimi003 Nowicjusz (180 p.)
0 głosów
1 odpowiedź 428 wizyt
pytanie zadane 26 grudnia 2016 w C i C++ przez 0xf Dyskutant (8,180 p.)
+10 głosów
0 odpowiedzi 2,408 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,960 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...