Duktape 介紹

Atypiape2發表於2024-08-25

(從我另一部落格[Atypiape]搬家過來)

譯文作者: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 的專案

如果你在自己的專案中使用了 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 引擎列表