QEMU、FFmpeg、BPG、QuickJS、TinyGL、TinyCCプロジェクトの創設者であるフランスの数学者Fabrice Bellard氏が、組み込みシステム向けの新しいJavaScriptエンジン「Micro QuickJS」を公開しました。このエンジンは、わずか10KBのRAM消費でJavaScriptプログラムをコンパイル・実行できます。Cライブラリと合わせて約100KBのメモリを消費します。JavaScriptをバイトコードにコンパイルし、バイトコードを個別に実行することも可能です。このプロジェクトのコードはC言語で記述されており、MITライセンスの下で配布されています。
このエンジンは、ECMAScript 5 (ES2019) 仕様に近い JavaScript 言語のサブセットをサポートしていますが、より厳格なコード要件を課し、非効率またはエラーが発生しやすい特定の JavaScript 構文の使用を禁止しています。例えば、グローバル変数は「var」キーワードを使用して宣言する必要があり、「with」の使用は禁止されています。配列は空にできません。「new Number(1)」形式の宣言による初期化は不可能で、ローカル変数は eval からアクセスできません。
Micro QuickJS のパフォーマンスは、2019 年から Fabrice が開発している QuickJS エンジンに近いです。Micro QuickJS は QuickJS エンジンと同じコードを一部使用していますが、アーキテクチャは大きく異なり、メモリ消費を最小限に抑えるように設計されています。例えば、Micro QuickJS はトレース型ガベージコレクターを使用するのに対し、QuickJS は参照カウント型ガベージコレクターを使用します。ガベージコレクターのオーバーヘッドは、割り当てられたメモリブロックごとにわずか数ビットです。メモリ割り当ては、malloc() ライブラリ関数とは独立した独自のアロケータを使用します。
QuickJSとのその他の違い:スタックを使用しない 仮想マシンオブジェクトの内部表現が異なる。文字列をUTF-8エンコーディングで格納する。コンパイル中に標準ライブラリを生成し、RAMに少数のオブジェクトを作成するだけでそれを永続メモリに格納する。QuickJSに似たパーサーだが、再帰は使用しない。バイトコード生成と最適化を単一のパスで組み合わせる(QuickJSは最適化のために複数のパスを使用する)。
出所: オープンネット.ru
