わずか10KBのRAMで動く組み込みシステム向けにJavaScriptプログラムをコンパイルして実行できる「MicroQuickJS」

家電製品や産業機器などを制御するための組み込みシステムでは、コスト削減のためメモリの容量が限られています。近年ハードウェアの性能が向上したことにより一部でJavaScriptやPythonなどスクリプト言語がCやC++の代わり、もしくは補助として利用できるようになりました。そこで、メモリが少ない環境でもJavaScriptが実行できるJavaScriptエンジン「MicroQuickJS」をFFmpegの作者でもあるファブリス・ベラール氏が公開しました。
bellard/mquickjs: Public repository of the Micro QuickJS Javascript Engine
https://github.com/bellard/mquickjs/
MicroQuickJSは10KBのRAMとCライブラリとして100KB程度のROMがあれば実行および構築が可能です。他の条件として、JavaScriptのサブセットのみをサポートしており、ES5に近い仕様となっています。strictモードが必須でエラーが発生しやすい構文や非効率なJavaScript構文は使用できません。
今回はAlmaLinux 9上でGCCコンパイル環境が整った環境でテストします。まず、gitでmquickjsのリポジトリをクローン。
git clone https://github.com/bellard/mquickjs.git
mquickjsフォルダに移動し「make」します。
cd mquickjs make
実行ファイル「mqjs」が作成されました。まずは使用メモリを10KBに限定しマンデルブロ集合を計算し作図するテスト用スクリプト「./mqjs --memory-limit 10k tests/mandelbrot.js」を実行すると簡易のフラクタル図が表示されました。

スクリプトからの実行だけでなく、ROMに書き込むためのコンパイル済みのバイトコードを作成することもできます。
./mqjs -o mandelbrot.bin tests/mandelbrot.js
バイトコードを直接実行することも可能です。
./mqjs -b mandelbrot.bin
◆QuickJSとの違い
MicroQuickJSはベラール氏が作成したQuickJSから派生したもので以下の違いがあります。
・言語サポート
MicroQuickJS:ES5 サブセット+一部の拡張
QuickJS:ES2023のほぼフル機能
・文字コード
MicroQuickJS:UTF-8
QuickJS:内部的にはUTF-16
・ガベージコレクション
MicroQuickJS:トレース型
QuickJS:参照カウント+循環除去
MicroQuickJSは省メモリ化のために最適化されており、最新の機能や複雑な制御などが不要な場合に有効なJavaScriptエンジンとなっています。
なお、ソーシャル系ニュースサイトのHacker Newsでは、MicroQuickJSについての議論が行われており「これが2010年に利用可能であった場合、RedisのスクリプトはLuaではなくJavaScriptになっていたでしょう」から始まるLuaとJavaScriptの議論や、ブラウザでMicroQuickJSを試すことができるMicroQuickJS Code Executorが紹介されています。
・関連記事
NVIDIAの業務用GPUとAIチップを搭載した激安AIサーバーを入手して家庭用AIマシンを作ってしまった記録が話題に - GIGAZINE
戦闘機「F-35」にはC++の特殊ルール適用版が使われており例外処理や再帰関数が禁止されている - GIGAZINE
シイタケがコンピューター用メモリチップの代わりになる - GIGAZINE
無料でJetBrainsのC言語IDE「CLion」が使用可能に、非商用に限り無料で参考書やプログラミング動画の作成にも使える - GIGAZINE
組み込みデバイス向けOS「OpenWrt」をプリインストールした公式Wi-Fiルーター「OpenWrt One」がついに発売 - GIGAZINE
・関連コンテンツ
in ソフトウェア, レビュー, Posted by darkhorse_logmk
You can read the machine translated English article 'MicroQuickJS' that can compile and run ….






