A francia matematikus, Fabrice Bellard, aki létrehozta a QEMU, FFmpeg, BPG, QuickJS, TinyGL és TinyCC projekteket, közzétette új JavaScript-motort beágyazott rendszerekhez – a Micro QuickJS-t, amely képes JavaScript-programokat fordítani és futtatni mindössze 10 KB RAM felhasználásával. A motor, a C-könyvtárral együtt körülbelül 100 KB tartós memóriát foglal. A JavaScript bytecode-ra is fordítható, és önállóan futhat a bytecode is. A projekt kódja C nyelven íródott, és MIT licenc alatt terjesztik.
A motor támogatja a JavaScript nyelv egy részhalmazát, amely közel áll az ECMAScript 5 (ES2019) specifikációhoz, de szigorúbb követelményeket támaszt a kóddal szemben, és nem engedélyezi bizonyos hatékonytalan vagy hibát okozó JavaScript szerkezetek használatát. Például a globális változókat kötelezően a 'var' kulcsszóval kell deklarálni, a 'with' használata tilos, a tömbök nem tartalmazhatnak üres helyeket, a 'new Number(1)' típusú deklarálás nem lehetséges, és az eval nem férhet hozzá a helyi változókhoz.
A Micro QuickJS teljesítménye közel áll a Fabrice által 2019 óta fejlesztett QuickJS motoréhoz. A Micro QuickJS a QuickJS motor kódjának egy részét használja, de az architektúrája nagymértékben eltér, és a memória minimális fogyasztására van tervezve. Például a Micro QuickJS egy nyomkövető szemétgyűjtőt alkalmaz, míg a QuickJS referencia-számlálást használ. A szemétgyűjtő költsége csupán néhány bit minden egyes lefoglalt memória blokkra. A memória allokálásához egy saját allokátor használják, amely nem függ a malloc() könyvtári funkciótól.
A QuickJS-tól való egyéb eltérések: nem használ stack; virtuális gépmás belső objektumábrázolás; a karakterláncok UTF-8 kódolásban vannak tárolva; a standard könyvtár generálása a fordítás során, és tárolása tartós memóriában, mindössze néhány objektum létrehozásával a RAM-ban; a QuickJS-hez hasonló, de rekurziót nem használó parser; a bytecode generálásának és optimalizálásának egyesítése egyetlen átfutásban (a QuickJS-nek több átfutása van az optimalizáláshoz).
Forrás: opennet.ru
