De Franse wiskundige Fabrice Bellard, die ooit projecten zoals QEMU, FFmpeg, BPG, QuickJS, TinyGL en TinyCC heeft opgericht, heeft een nieuwe JavaScript-engine voor embedded systemen gepubliceerd ā Micro QuickJS, dat in staat is om JavaScript-programma's te compileren en uit te voeren met slechts 10 KB RAM-geheugen. Samen met de C-bibliotheek neemt de engine ongeveer 100 KB permanente opslag in beslag. Het is mogelijk om JavaScript naar bytecode te compileren en de bytecode afzonderlijk uit te voeren. De code van het project is geschreven in de programmeertaal C en wordt verspreid onder de MIT-licentie.
De engine ondersteunt een subset van de programmeertaal JavaScript, dicht bij de specificatie van ECMAScript 5 (ES2019), maar stelt strengere eisen aan de code en staat het gebruik van sommige inefficiƫnte of foutgevoelige JavaScript-constructies niet toe. Bijvoorbeeld, globale variabelen moeten altijd worden gedeclareerd met het sleutelwoord 'var', het gebruik van 'with' is verboden, arrays mogen geen gaten hebben, initiƫle declaratie in de vorm van 'new Number(1)' is niet mogelijk, en toegang tot lokale variabelen is niet mogelijk vanuit eval.
De prestaties van Micro QuickJS liggen dicht bij die van de QuickJS-engine, die door Fabrice sinds 2019 is ontwikkeld. Micro QuickJS maakt gebruik van een deel van de code van de QuickJS-engine, maar de architectuur verschilt op grote schaal en is ontworpen voor een minimaal geheugengebruik. Bijvoorbeeld, Micro QuickJS maakt gebruik van een traceerbare garbage collector, terwijl QuickJS gebruikmaakt van referentieltelling. De overhead van de garbage collector bedraagt slechts enkele bits per toegewezen geheugensegment. Voor geheugentoewijzing wordt een eigen allocator gebruikt, die niet afhankelijk is van de bibliotheekfunctie malloc().
Andere verschillen met QuickJS: geen gebruik van de stack; een andere interne representatie van objecten; opslag van strings in UTF-8 codering; generatie van de standaardbibliotheek tijdens compilatie en opslag daarvan in permanente opslag met het creƫren van slechts enkele objecten in het RAM-geheugen; een parser die vergelijkbaar is met QuickJS, maar zonder recursie; combinatie van bytecode-generatie en optimalisatie in ƩƩn doorgang (in QuickJS zijn er meerdere doorgangen voor optimalisatie). virtuele machineGepubliceerd: postmarketOS 25.12, een Linux-distributie voor smartphones en mobiele apparaten.
Bron: opennet.ru
