Prantsuse matemaatik Fabrice Bellard, kes asutas omal ajal projektid QEMU, FFmpeg, BPG, QuickJS, TinyGL ja TinyCC, on avaldanud uue JavaScripti mootori sisseehitatud süsteemidele - Micro QuickJS, mis suudab kompileerida ja käivitada JavaScripti programme, olles samas vaid 10 KB RAM-i. Koos C-raamatukoguga võtab mootori maht umbes 100 KB püsivara. JavaScripti saab kompileerida ka bytecode'i ning eraldi käitada bytecode'i. Projekti kood on kirjutatud keeles C ja see levitatakse MIT litsentsi alusel.
Mootor toetab JavaScripti keele alamhulga, mis on lähedane ECMAScript 5 (ES2019) spetsifikatsioonile, kuid nõuab rangemaid koodinõudeid ja ei luba kasutada mõningaid ebatõhusate või vigaseid JavaScripti konstruktsioone. Näiteks peavad globaalmuutujad olema tingimata deklareeritud võtmesõna "var" kaudu, "with" kasutamine on keelatud, massiivides ei tohi olla tühikuid, ning ei ole võimalik algatada deklareerimist nagu "new Number(1)"; eval käsud ei pääse kohalike muutujate juurde.
Micro QuickJS jõudlus on sarnane QuickJS mootori jõudlusele, mida on arendanud Fabrice alates 2019. aastast. Micro QuickJS kasutab osa koodist QuickJS mootori poolt, kuid arhitektuur on suuresti erinev ja disainitud minimaalsete mälunõuete jaoks. Näiteks Micro QuickJS-s on kasutusel jälgimisprügi koristaja, samas kui QuickJS kasutab lingikennitust. Prügikoristaja haldamise kulud on vaid paar bitti iga eraldatud mälutüki kohta. Mälueraldamiseks kasutatakse oma allocatorit, mis ei sõltu raamatukogu funktsioonist malloc().
Teised erinevused QuickJS-st: ei kasuta steke; virtuiaalmasinteistsugune sisemine esitus objektidest; stringide salvestamine UTF-8 kodeeringus; стандартная библиотека генерируется kompileerimise käigus ja hoitakse püsivaras, luues RAM-is vaid mõned objektid; parsi, mis on QuickJS-le lähedane, kuid ei kasuta rekursiooni; bytecode'i genereerimise ja optimeerimise kombineerimine ühes läbimises (QuickJS-is on optimeerimiseks mitu läbitset).
Allikas: opennet.ru
