Duktape 是一個輕量級的嵌入式 JavaScript 引擎,專註於可移植性和低占用率。 Duktape 可以被輕鬆地集成進一個 C/C++ 項目中:只需要將 duktape.c、duktape.h 和 duk_config.h 三個文件加入你的構建項目中,並使用 Duktape API 來實現... ...
譯文作者:Atypiape
原文來自:Duktape
寫作日期:2016-08-12
Duktape 是一個輕量級的嵌入式 JavaScript 引擎,專註於可移植性和低占用率。
Duktape 可以被輕鬆地集成進一個 C/C++ 項目中:只需要將 duktape.c、duktape.h 和 duk_config.h 三個文件加入你的構建項目中,並使用 Duktape API 來實現 C 代碼與 ECMAScript 函數的雙向調用。
主要特性
- 可嵌入、可移植、低占用:能夠運行在 256kB 快閃記憶體(Flash)和 64kB 系統記憶體(RAM)的平臺上;
- 相容 ECMAScript E5/E5.1 標準,並借鑒了 ECMAScript E6 的部分特性;
- 支持 Khronos/ES6 的 TypedArray 對象和 Node.js 的 Buffer 對象;
- 內置調試器;
- 內置正則表達式引擎;
- 內置 Unicode 支持;
- 最小限度的平臺依賴;
- 整合了引用計數機制和 mark-and-sweep 垃圾回收機制;
- 自定義特性,如協同程式(coroutines)、內置日誌框架、內置基於 CommonJS 的模塊載入框架;
- 屬性(property)虛擬化中使用了 ECMAScript E6 Proxy 對象的一個子集;
- 以位元組碼轉儲(dump)/載入的方式,來對已編譯函數進行緩存;
- 採用 MIT 自由許可協議。
代碼和記憶體占用
_ | x86 預設 | x86 低端記憶體 | x86 全低端記憶體 |
---|---|---|---|
代碼 | 170kB | 150kB | 200kB |
啟動記憶體 | 68kB | 35kB | 4kB |
請參考 GCC 選項中的最小化代碼占用。全低端記憶體選項使用了“指針壓縮”和基於 ROM 的字元串/對象。基於 ROM 的字元串/對象也可以用於其他非低端記憶體選項。
當前狀態
- 穩定
技術支持
- Duktape Wiki: wiki.duktape.org
- 用戶問答社區: Stack Overflow 上的 duktape 標簽
- Bugs 和功能需求: GitHub issues
- 綜合討論區:chat.freenode.net (webchat) 上的 IRC 頻道 #duktape
使用 Duktape 的項目
如果你在自己的項目中使用了 Duktape,可以發送一封郵件或者開一個 GitHub issue 來將項目加到列表中。
類似的引擎
有多個與 Duktape 定位類似的 JavaScript 引擎,至少有如下幾個:
- Espruino (MPL v2.0)
- JerryScript (Apache License v2.0)
- MuJS (Affero GPL)
- quad-wheel (MIT License)
- tiny-js (MIT license)
- v7 (GPL v2.0)
也可以參考 ECMAScript 引擎列表。