译文作者: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 引擎列表。