logo
15.09.2020 11:59
1
Node vyuziva syntax JavaScriptu ale len tak zo zvedavosti by ma zaujimalo ako kompiluje kod? Robi to ako PHP ze ho prelozi do C-cka alebo kompiluje nativne do asembleru, pripadne inak?
15.09.2020 13:20
3
node.js se skládá z:
- spousty js kódu, který implementuje základní věci jako http, filesystem api, eventy a další core knihovny, viz přehled api https://nodejs.org/docs/latest/api/, drtivá většina je právě psaná v samotném js
- pro potřeby node.js poté vznikla v c implementované rozhranní pro async IO operace (https://github.com/libuv/libuv), tohle je hlavní grál node.js, poskytuje vnitřnosti pro obsluhu http, tcp, fs a spousty dalších IO operací
- poté je jádro pro vykonování js kódu v8 od Googlu (c++ v kombinaci s js), tady probíhá veškeré magie. JS kód se optimalizuje, inlinuje, slovníkuje, v reálném čase se přepisuje do ASM (JIT - just in time compiler), samotné generování asm máš třeba přímo tady https://github.com/v8/v8/tree/4d6c5d...c/compiler/x64

Node.js má gdb interface, pokud se o to chceš zajímat více, doporučuji moc pěkný rozbor na https://github.com/danbev/learning-v8

Do node.js a libuv jsem nějakou dobu pracoval a přispíval do něj.

PS: PHP negeneruje C kód, ale bytecode, který je v paměti a ten se spouští na procesoru, jako mezičlánek je naparsovaný php soubor přeložený do tzv. opcodes (viz https://www.php.net/manual/en/intern...codes.list.php). Od php 8 už umí php také používat JIT. Rozdíl mezi generování bytecodu na začátku při parsování a JIT je v tom, že JIT umí reagovat na způsob používání jednotlivých metod a optimalizovat je.
15.09.2020 17:24
4
Node.js nepoužívá syntaxi JavaScriptu, je to JavaScript. Integruje V8 JS engine stejně jako Chrome/Chromium/Vivaldi atd.

PHP nepřekládá nic do Cčka. Jaký assembler?

Upřímně, proč se ptáte na něco čemu vůbec nerozumíte a ani detailní odpověď Vám k ničemu nebude?
15.09.2020 19:53
5
Původně odeslal exander
Node.js nepoužívá syntaxi JavaScriptu, je to JavaScript. Integruje V8 JS engine stejně jako Chrome/Chromium/Vivaldi atd.

PHP nepřekládá nic do Cčka. Jaký assembler?

Upřímně, proč se ptáte na něco čemu vůbec nerozumíte a ani detailní odpověď Vám k ničemu nebude?
Mas pravdu, dnes uz PHP do C-cka nekompiluje.
15.09.2020 19:55
6
PHP se do C normálně nekompilovalo nikdy, to zavedl akorát Facebook, protože jim netačila rychlost.
15.09.2020 19:58
7
jen doplnění o Facebooku a php, jmenovalo se to HHVM, což je dnes už také deprecated a vznikl z toho nový jazyk Hack s vlastním vm.
15.09.2020 20:49
8
Původně odeslal exander
PHP se do C normálně nekompilovalo nikdy, to zavedl akorát Facebook, protože jim netačila rychlost.
precitaj si historiu vzniku PHP...
15.09.2020 21:50
9
Původně odeslal node
precitaj si historiu vzniku PHP...
PHP se nikdy nepřekládalo do C (mimo Facebook, viz výše), jinak jsem ho používal už okolo roku 2000. Ani první verze nic nepřekládala do C.

Edit: Tady máte historii: https://www.php.net/manual/en/history.php.php
15.09.2020 22:08
10
PHP vznikol ako sablonovaci "jazyk" pre Ccko ale sak dobre. tomas to tu uz popisal takze nie je co dalej riesit.
15.09.2020 22:11
11
Původně odeslal node
PHP vznikol ako sablonovaci "jazyk" pre Ccko ale sak dobre. tomas to tu uz popisal takze nie je co dalej riesit.
Ne, mluvíte nesmysly (podobně jako o koronaviru). PHP vzniklo jako jednoduchý nástroj pro tvorbu webu, jediné, co má s C společné je, že je v něm naprogramované.
15.09.2020 22:19
12
Původně odeslal node
precitaj si historiu vzniku PHP...
tady je zdroják php 4.0 z roku 1999, jeho první verze (použil bych php3, ale to není na githubu).


Už tehdy se kompiloval do bytecodu a používal opcodes jako symbolické instrukce/funkce.
php-src/zend_compile.c at aceaabceffd537a0ed83fa25e189b08eae585f4a ·…

Do C se PHP opravdu nikdy nepřekládal.
15.09.2020 22:23
13
Původně odeslal TomášX
tady je zdroják php 4.0 z roku 1999, jeho první verze (použil bych php3, ale to není na githubu).


Už tehdy se kompiloval do bytecodu a používal opcodes jako symbolické instrukce/funkce.
php-src/zend_compile.c at aceaabceffd537a0ed83fa25e189b08eae585f4a ·…

Do C se PHP opravdu nikdy nepřekládal.
PHP byl na začátku interpretovaný jazyk než se překládal do Bytecode, ale ani tehdy nemělo smysl ho překládat do C, to nemá žádný smysl, leda tím FaceBook stylem, kdy Vám JIT už nestačí.