Francoski matematik Fabrice Bellard, ki je nekoč ustanovil projekte QEMU, FFmpeg, BPG, QuickJS, TinyGL in TinyCC, je objavil novi JavaScript motor za vgrajene sisteme - Micro QuickJS, ki lahko prevaja in izvaja JavaScript programe, pri čemer porabi le 10 KB RAM-a. Skupaj s knjižno zbirko C motor zaseda približno 100 KB stalnega pomnilnika. Možna je kompilacija JavaScript v bajtkodo in ločeno izvajanje bajtkode. Koda projekta je napisana v jeziku C in je razširjena pod MIT licenco.
Motor podpira podmnožico jezika JavaScript, ki je blizu specifikaciji ECMAScript 5 (ES2019), a postavlja strožje zahteve glede kode in ne dovoljuje uporabe nekaterih neučinkovitih ali napak povzročajočih JavaScript konstrukcij. Na primer, globalne spremenljivke je nujno treba deklarirati s ključnimi besedami 'var', uporaba 'with' je prepovedana, tabele ne morejo imeti praznih mest, inicializacija v obliki 'new Number(1)' ni mogoča, dostop do lokalnih spremenljivk iz eval pa je onemogočen.
Uspešnost Micro QuickJS je blizu motorju QuickJS, ki ga razvija Fabrice od leta 2019. V Micro QuickJS je vključena del kode iz motorja QuickJS, vendar se arhitektura v veliki meri razlikuje in je zasnovana za minimalno porabo pomnilnika. Na primer, v Micro QuickJS je uporabljen sledilni zbiralnik odpadkov, medtem ko je v QuickJS uporabljen števalnik referenc. Presežek zbiralnika odpadkov znaša le nekaj bitov na vsak dodeljeni blok pomnilnika. Za dodeljevanje pomnilnika se uporablja lastni alokator, ki ni odvisen od knjižnične funkcije malloc().
Druga razlikovanja od QuickJS: ne uporablja sklada; virtualni strojdrugačno notranje predstavljene objektov; shranjevanje nizov v kodiranju UTF-8; generiranje standardne knjižnice med kompilacijo in njen zajem v stalnem pomnilniku s ustvarjanjem le nekaj objektov v RAM-u; parser, ki je podoben QuickJS, vendar ne uporablja rekurzije; združevanje generacije bajtkode in optimizacije v enem prehodu (v QuickJS so potrebni številni prehodi za optimizacijo).
Izvor: opennet.ru
