Der Gründer von QEMU und FFmpeg hat die JavaScript-Engine Micro QuickJS veröffentlicht

Der französische Mathematiker Fabrice Bellard, der einst Projekte wie QEMU, FFmpeg, BPG, QuickJS, TinyGL und TinyCC ins Leben rief, hat eine neue JavaScript-Engine für eingebettete Systeme veröffentlicht - Micro QuickJS. Diese kann JavaScript-Programme kompilieren und ausführen und benötigt dabei nur 10 KB RAM. Zusammen mit der C-Bibliothek benötigt die Engine etwa 100 KB permanenten Speicher. Es ist möglich, JavaScript in Bytecode zu kompilieren und diesen separat auszuführen. Der Code des Projekts ist in C geschrieben und wird unter der MIT-Lizenz verbreitet.

Die Engine unterstützt ein Subset der JavaScript-Sprache, das der ECMAScript 5-Spezifikation (ES2019) nahekommt, jedoch striktere Anforderungen an den Code stellt und die Verwendung bestimmter ineffizienter oder fehleranfälliger JavaScript-Konstrukte nicht erlaubt. Beispielsweise müssen globale Variablen zwingend mit dem Schlüsselwort „var“ deklariert werden, die Verwendung von „with“ ist verboten, Arrays dürfen keine Lücken aufweisen, die Initialisierung bei der Deklaration wie „new Number(1)“ ist nicht erlaubt und der Zugriff auf lokale Variablen aus eval ist nicht möglich.

Die Leistung von Micro QuickJS ist vergleichbar mit dem von Fabrice seit 2019 entwickelten QuickJS-Engine. Micro QuickJS nutzt teilweise Code aus der QuickJS-Engine, jedoch unterscheidet sich die Architektur erheblich und wurde für minimalen Speicherverbrauch konzipiert. Beispielsweise verwendet Micro QuickJS einen tracing Garbage Collector, während QuickJS eine Referenzzählung nutzt. Die Overheadkosten des Garbage Collectors betragen nur wenige Bits für jeden zugewiesenen Speicherblock. Für die Speicherzuweisung wird ein eigener Allocator verwendet, der nicht von der Bibliotheksfunktion malloc() abhängt.

Weitere Unterschiede zu QuickJS: verwendet keinen Stack virtuelle Maschine; eine andere interne Repräsentation von Objekten; Speicherung von Strings in UTF-8-Kodierung; Generierung der Standardbibliothek während der Kompilierung und deren Speicherung im permanenten Speicher, wobei im RAM nur wenige Objekte erstellt werden; ein nah an QuickJS, aber ohne Rekursion arbeitender Parser; Kombination von Bytecode-Generierung und Optimierung in einem Durchgang (QuickJS hat mehrere Durchgänge zur Optimierung).

Quelle: opennet.ru

Erwerben Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster