0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

elkよりもduktapeの方が便利でした

Posted at

あらすじ

こちらでMikanOSのフォークTNTOSで使ったJavaScriptエンジンを紹介しましたが、
その色々試した結果、Duktapeの方が、機能が多く、簡単に導入でき、
TNTOSでも使えたためこちらを紹介します。

Duktapeとは

埋め込みやすいJavaScriptエンジンで、C言語で出来てます。

elkと比較したメリット

1. ES5準拠

ES5.1に準拠していて、さらにES6以降の一部も実装されています。
elkではまっさらで何も無かったのが、DuktapeではDateも! Arrayも! Numberも! 標準ライブラリがあります!!!!!!!!
そして文字列の長さもバイト数ではなくUnicodeコードポイント数です!!!

(これ強すぎる...)
(というかelkが弱すぎる...)

3. 型情報がある

DuktapeにはDuktapeというグローバル変数があったりしますが、
それに関する型がもちろん用意されています!!!!!

elkはまっさらでtsconfigにnoLib: trueとかlib: []と書いてもエラーになって大変だったのでありがたい!!!!!(それは標準ライブラリの問題じゃん)

4. モジュールシステムが使える

モジュールシステムといってもCommonJSであり、モジュールローダーの実装等が必要ですが、CommonJSモジュールシステムが使えます!!!!

これでNodeJSライクAPIを実装できるね!

5. MITライセンス

見慣れたMITライセンスで、扱いやすいです。
一方elkはAGPLなのでソースコード公開したりライセンスを同じにする必要があって大変です。

elkと比較したデメリット

デメリットもあります。

1. メモリの融通が利きづらい

Duktapeはmalloc等でメモリを管理していて、組み込み環境では扱いづらいかもしれません。
そして、64KBのRAMで動作すると言っており、elkと比較すると大きいです。
一方elkはmallocを使わず、用意したバッファのみ使う構造で、
しかも100バイトのRAMで動作します。

Does not use malloc. Operates with a given memory buffer only

と主張しているぐらいです。

2. 使う標準ライブラリが多め

Duktapeelkよりも使う標準ライブラリが多いです。
そのため、一部の環境ではDuktapeはコンパイルできないかもしれません。

QuickJSも同じように、TNTOSの環境では
標準ライブラリが不足していてコンパイルできませんでした。

3. 値を作るときにスタックを使う必要がある

DuktapeLuaと同じように、スタックを使って値を作る必要があります。
これがまあまあ大変で、TNTSuperManも過去にLua開発でスタック地獄に苦しめられていました。

一方elkは、変数ベースのAPIで、スタックに苦しめられることは無く、直感的に理解できます。

elkとの共通点

1. 導入が楽

tar.xzをダウンロードすれば、src-nolineディレクトリの中に
C言語ソースファイル一つとヘッダーだけの状態であるので、
elkのように楽々導入できます

2. 標準ライブラリが少ない状態でも使える

QuickJSfenv.hのライブラリが無くて使えませんでしたが、
elkと同じく、Duktapeはそのようなライブラリが不要で使えました。

しかし一部環境では使えないこともあるのでご了承ください。

終わりに

これは選択肢の一つで、他の手段も沢山あります。

制限が厳しい所ではelkが良かったり、
標準ライブラリが豊富な所ではQuickJSが良かったり、
Apple製品以外使えない生粋のApple信者にはJavaScriptCoreが良かったりします。

そもそも、JavaScriptにこだわらず、Luaにするのもいいかもしれません。

そのため、この記事は大量にある
言語プロセッサの中の一つとして捉えてもらえばなと。
最後までお読みいただきありがとうございました。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?