Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

DuktaPE是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性。
Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API从C代码中,调用ECMAScript代码的功能,反之亦然。

主要特性:

  • 嵌入式,便携,小巧:
    200kB的代码
    46KB Ram启动(X86,默认选项)
    22KB RAM启动(X86,lowmem选项)
    42kLoC(不包括注释等)
    可以运行在具有256kB的闪存和96KB RAM的系统平台

  • ECMAScript的E5/ E5.1标准,一些功能从E6草案借来的

  • 内置正则表达式引擎
  • 内置的Unicode支持
  • 最小的平台依赖性
  • 结合"引用计数"和"标记清除"的垃圾收集与回收机制
  • 自定义功能,如协程,内置日志框架,并内置CommonJS的基础模块加载框架(注: 类似node.- js中的require/export
  • 使用ecmascript ES6 Proxy对象实现的Property virtualization
  • 自由许可证(MIT

目前状态: 稳定

支持:

用户社区Q&A: stackoverflow duktape 标签
漏洞和新功能要求: GitHub Issues
一般讨论: IRC #duktape on chat.freenode.net

如何使用

1. 添加到编绎系统

添加 Duktape C 源文件和头文件到你的build。任何build系统均可支持. 发行包里有一个Makefile的范例作为参考. 下面是一个简单的例子:

$ gcc -std=c99 -o test test.c duktape.c -lm
$ ./test
Hello world!

2 初始化上下文(context)

初始化并在你的程序中使用Duktape

/* test.c */
#include "duktape.h"

int main(int argc, char *argv[]) {
  duk_context *ctx = duk_create_heap_default();
  duk_eval_string(ctx, "PRint('Hello world!');");
  duk_destroy_heap(ctx);
  return 0;
}

3 添加c语言函数绑定(function bindings)

在Ecmascript(JavaScript)代码中调用C语言的函数,首先要声明你的C函数:

@H_360_127@int adder(duk_context *ctx) { int i; int n = duk_get_top(ctx); /* #args */ double res = 0.0; for (i = 0; i < n; i++) { res += duk_to_number(ctx, i); } duk_push_number(ctx, res); return 1; /* one return value */ }

注册你的函数, 例如,放到global对象中:

duk_push_global_object(ctx);
duk_push_c_function(ctx, adder, DUK_VARARGS);
duk_put_prop_string(ctx, -2 /*idx:global*/, "adder");
duk_pop(ctx);  /* pop global */

然后你就可以在Ecmascript中调用这个函数:

duk_eval_string(ctx, "print('2+3=' + adder(2, 3));");
duk_pop(ctx);  /* pop eval result */

via ourjs
原文

脚本宝典总结

以上是脚本宝典为你收集整理的Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎全部内容,希望文章能够帮你解决Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。