duktape是什么?

内容纲要

duktape是一个精简的嵌入式JavaScript引擎,可以看做精简版的V8。引擎运行需要的资源少,项目目标是支持集成运行到嵌入式设备上。

公司一个项目,要集成duktape。于是就学习了一下duktap。

我们知道很多基础项目都是C/C++等语言写成的,这样更贴近底层,性能也是最好的。这样的基础项目会提供一些API供上层调用。我们要完成一些项目时,大部分情况都不需要自己造轮子,而是使用别人的轮子,我们只需要编写上层业务逻辑将这些轮子组合集成起来就可以了,并且很多时候,上层业务逻辑经常改动。需要更灵活的处理。

于是人们就想了很多办法来实现这样的需求,就是把业务逻辑用Java,JavaScript,Pathon,lua等脚本语言来编写。由这些高级语言来调用底层的组件实现炫酷的功能。

duktape是一个JavaScript引擎的实现,支持将C语言的组件封装成JavaScript接口,被JavaScript脚本调用。

我们对duktape的学习就是学习怎样将C/C++的底层接口封装成运行在duktape中的JavaScript脚本能够调用的JavaScript接口。

类似于学习怎样封装Pathon类库,Java的JNI封装等。

转载:

https://www.huaweicloud.com/articles/b3b85705827e5cd73125c83a1657d79c.html

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

转载于:

https://www.cnblogs.com/atypiape/p/duktape-introduction.html

https://blog.csdn.net/weixin_33863087/article/details/94730555