1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

逆に何が使えるのかわからないレベルに機能が削がれた超コンパクトJavaScriptエンジン「elk」

Last updated at Posted at 2025-05-24

今回はMikanOSのフォークOSであるTNTOSに何としてでもJavaScriptを組み込みたかった哀れな人が発見した超低レベルなJavaScriptエンジンelkについて紹介します。

そもそもJavaScriptエンジンとは

JavaScriptエンジンとはJavaScriptを実行するプログラムで、
例えばJavaScriptCoreSpiderMonkeyQuickJSなどがあります。
特徴としては、ECMAScriptで定められたメソッドしかなく、documentなどの所謂WebAPI等が無い、純粋にJavaScriptを解釈・実行するプログラムです。

WebAPIなどは、そのJavaScriptエンジンとやりとりをしてJavaScript環境内にdocument等を設置してもらいます。

elkとは

組み込み用の超小さいJavaScriptエンジンです。
発電に例えると、V8は原子力発電所、JavaScriptCoreは水力発電所、QuickJSはガソリン発電機、elkは手回し発電機です。

特徴としては以下があります。

  • どこでも動く
  • 依存関係ゼロ
  • elk.celk.hをコピペするだけで導入完了
  • APIがシンプル
  • 使うメモリはこっちが用意したバッファ内のみ
  • JITコンパイラなど無い

組み込み開発者に優しすぎる...

サンプルコード

まずソースディレクトリにelk.celk.hをポーイ
そして初期化はこれだけ!

main.c
#include <stdio.h>
#include "elk.h"

int main() {
  char buf[200];
  struct js *js = js_create(buf, sizeof(buf));
  // 任意のコード
  return 0;
}

ね、簡単でしょ?
一応MikanOSのフォーク内でのコードもあります。サンプルとして見て、どうぞ。

これだけだと神のようなエンジンだが問題が...

しかし問題はJavaScriptの仕様であった

なんと、JavaScriptの仕様が散々でありました。ES6のサブセットと言われていますが、色々と無いです。

無い機能

  • a[b](動的なメンバー)
  • 2 ** 16(べき乗)
  • アロー演算子
  • strictモードの場合はvarconst(letを使ってとのこと)
  • do while switch(forを使ってとのこと)
  • 配列、クロージャー、プロトタイプ、thisnewdelete
  • 標準ライブラリ(DateRegexpFunctionStringNumberなど)
  • セミコロンの書き忘れのお見逃し(つまりセミコロン必須)

逆に何が出来るのか知りたいですね。

ある機能

  • for文
  • if-else
  • != == !== ===
  • typeof("a") === "string"
  • a ? b : c
  • 関数(let f = function(x, y) {return x + y; };)
  • オブジェクト(一応あった...)

不便なとこ

  • 文字列の長さはバイト数で計算される(ECMAScript標準ではUnicodeコードポイント数)('Київ'.length === 8)
  • セミコロン必須

まとめ

elkとは過酷な環境でも動くよう色々なものをそぎ落としたC言語のJavaScriptエンジンライブラリです。MikanOSや組み込み開発などのような過酷な環境でどうしてもJavaScriptを使いたい人にお勧めです。

おまけ: QuickJS

QuickJSES2023を実装したJavaScriptエンジンです。
ちなみに自分が愛用するiPhone 16sSafariに負けました(checkyou.pages.devで一歩及ばずES2022と判定されました)

これもelkと似たようにC言語ソース直置きで組み込みやすいのですが、MikanOSの環境では標準ライブラリが少なすぎて無理でした。標準ライブラリが豊富なら絶対にQuickJSを使うべきです。

ちなみにMinecraftScriptAPIQuickJSだそうですよ。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?