Prantsuse matematik Fabrice Bellard, kes asutas omal ajal projektid QEMU, FFmpeg, BPG, QuickJS, TinyGL ja TinyCC, on avalikustanud uue JavaScripti mootori integreeritud sĂŒsteemidele â Micro QuickJS, mis suudab kompileerida ja kĂ€ivitada JavaScripti programme, tarbides vaid 10 KB RAM-i. Koos C-raamatukoguga vĂ”tab mootor umbes 100 KB pĂŒsimĂ€lu. On vĂ”imalik kompileerida JavaScripti bytecode'i ja kĂ€ivitada separaatne bytecode. Projekti kood on kirjutatud C-keeles ja jagatakse MIT litsentsi alusel.
Mootor toetab JavaScripti alamosa, mis on lĂ€hedane ECMAScript 5 (ES2019) spetsifikatsioonile, kuid seab koodile rangemad nĂ”uded ja ei luba kasutada teatud ebatĂ”husaid vĂ”i vigaseid JavaScripti konstruktsioone. NĂ€iteks peavad globaalmuutujad olema tingimata deklareeritud vĂ”tmesĂ”na âvarâ kaudu, on keelatud âwithâ kasutamine, massiivid ei saa sisaldada tĂŒhikuid, deklareerimisel ei ole vĂ”imalik kasutada ânew Number(1)â ning eval'is ei ole vĂ”imalik pÀÀseda kohalikele muutujatele.
Micro QuickJS'i jĂ”udlus on lĂ€hedane QuickJS'i mootorile, mida on arendatud Fabrice'i poolt alates 2019. aastast. Micro QuickJS'is on kasutatud osa koodist QuickJS'ist, kuid arhitektuur on suuresti erinev ja projekteeritud minimaalsete mĂ€lutarbimise jaoks. NĂ€iteks Micro QuickJS kasutab jĂ€lgivat prĂŒgikoguja, samas kui QuickJS'is on rakendatud viidete arvestust. PrĂŒgikoguja kulu on vaid mĂ”ne bitti iga eraldatud mĂ€luploki kohta. MĂ€lueralduseks kasutatakse oma allocatorit, mis ei sĂ”ltu malloc() raamatukogu funktsioonist.
Teised erinevused QuickJS'ist: ei kasuta steki; virtuaalne masinteistsugune sisemine objekti esitus; stringide salvestamine UTF-8 kodeeringus; standardteegi genereerimine kompileerimise ajal ja selle salvestamine pĂŒsivasse mĂ€llu, luues RAM-is vaid mĂ”ned objektid; parser, mis on lĂ€hedane QuickJS'ile, kuid ei kasuta rekursiooni; bytecode'i genereerimise ja optimeerimise ĂŒhendamine ĂŒhes lĂ€bimisse (QuickJS'is on mitmeid lĂ€bisĂ”ite optimeerimiseks).
Allikas: opennet.ru
