QEMU, FFmpeg, BPG, QuickJS, TinyGL ve TinyCC projelerinin kurucusu Fransız matematikçi Fabrice Bellard, gömülü sistemler için yeni bir JavaScript motoru olan Micro QuickJS'i yayınladı. Bu motor, yalnızca 10 KB RAM tüketerek JavaScript programlarını derleyip çalıştırabiliyor. C kütüphanesiyle birlikte motor yaklaşık 100 KB bellek kaplıyor. JavaScript'i bayt koduna derleyip bayt kodunu ayrı olarak çalıştırabiliyor. Projenin kodu C dilinde yazılmış olup MIT lisansı altında dağıtılıyor.
Bu motor, ECMAScript 5 (ES2019) spesifikasyonuna yakın bir JavaScript dili alt kümesini destekler, ancak daha katı kod gereksinimleri getirir ve bazı verimsiz veya hataya açık JavaScript yapılarını kullanmayı yasaklar. Örneğin, global değişkenler "var" anahtar kelimesi kullanılarak bildirilmelidir, "with" kullanımı yasaktır, diziler boş olamaz, "new Number(1)" biçimindeki bildirimlerle başlatma mümkün değildir ve yerel değişkenlere eval'den erişilemez.
Micro QuickJS'in performansı, Fabrice tarafından 2019'dan beri geliştirilen QuickJS motorunun performansına yakındır. Micro QuickJS, QuickJS motoruyla aynı kodun bir kısmını kullanır, ancak mimarisi önemli ölçüde farklıdır ve minimum bellek tüketimi için tasarlanmıştır. Örneğin, Micro QuickJS izleme tabanlı bir çöp toplayıcı kullanırken, QuickJS referans sayımı kullanır. Çöp toplayıcının ek yükü, tahsis edilen bellek bloğu başına yalnızca birkaç bittir. Bellek tahsisi, malloc() kütüphane fonksiyonundan bağımsız olarak kendi ayırıcısını kullanır.
QuickJS'den diğer farklılıkları: yığın (stack) kullanmaz. sanal makineNesnelerin farklı bir iç temsili; dizelerin UTF-8 kodlamasında saklanması; derleme sırasında standart kütüphanenin oluşturulması ve RAM'de yalnızca birkaç nesne oluşturularak kalıcı bellekte saklanması; QuickJS'ye benzer, ancak özyineleme kullanmayan bir ayrıştırıcı; bayt kodu oluşturma ve optimizasyonun tek bir geçişte birleştirilmesi (QuickJS'nin optimizasyon için birkaç geçişi vardır).
Kaynak: opennet.ru
