نشر عالم الرياضيات الفرنسي فابريس بيلارد، مؤسس مشاريع QEMU وFFmpeg وBPG وQuickJS وTinyGL وTinyCC، محرك جافا سكريبت جديدًا للأنظمة المدمجة يُدعى Micro QuickJS. يستطيع هذا المحرك تجميع وتنفيذ برامج جافا سكريبت باستهلاك 10 كيلوبايت فقط من ذاكرة الوصول العشوائي (RAM). ويشغل المحرك، مع مكتبة C، حوالي 100 كيلوبايت من الذاكرة. كما يمكنه تجميع جافا سكريبت إلى بايت كود وتشغيل البايت كود بشكل منفصل. كُتب كود المشروع بلغة C ويُوزع بموجب ترخيص MIT.
يدعم المحرك مجموعة فرعية من لغة جافا سكريبت قريبة من مواصفات ECMAScript 5 (ES2019)، ولكنه يفرض متطلبات برمجية أكثر صرامة ويمنع استخدام بعض بنيات جافا سكريبت غير الفعالة أو المعرضة للأخطاء. على سبيل المثال، يجب تعريف المتغيرات العامة باستخدام الكلمة المفتاحية "var"، ويُحظر استخدام "with"، ولا يمكن أن تكون المصفوفات فارغة، ولا يمكن تهيئة المتغيرات باستخدام تعريفات من نوع "new Number(1)"، ولا يمكن الوصول إلى المتغيرات المحلية من خلال دالة eval.
يُقارب أداء محرك Micro QuickJS أداء محرك QuickJS الذي طوره فابريس منذ عام ٢٠١٩. يستخدم Micro QuickJS بعضًا من نفس شيفرة محرك QuickJS، لكن بنيته مختلفة تمامًا ومصممة لتقليل استهلاك الذاكرة إلى أدنى حد. على سبيل المثال، يستخدم Micro QuickJS جامع قمامة يعتمد على التتبع، بينما يستخدم QuickJS عد المراجع. لا تتجاوز تكلفة جامع القمامة بضعة بتات لكل كتلة ذاكرة مُخصصة. أما تخصيص الذاكرة فيتم باستخدام مُخصص خاص به، مستقل عن دالة malloc() في المكتبة.
من بين الاختلافات الأخرى عن QuickJS: أنه لا يستخدم مكدسًا آلة افتراضية؛ تمثيل داخلي مختلف للكائنات؛ تخزين السلاسل بترميز UTF-8؛ إنشاء المكتبة القياسية أثناء التجميع وتخزينها في الذاكرة الدائمة مع إنشاء عدد قليل فقط من الكائنات في ذاكرة الوصول العشوائي؛ محلل مشابه لـ QuickJS، ولكنه لا يستخدم الاستدعاء الذاتي؛ الجمع بين توليد رمز البايت والتحسين في تمريرة واحدة (يحتوي QuickJS على عدة تمريرات للتحسين).
المصدر: opennet.ru
