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函数:

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
原文

    原文作者:江小湖Laker
    原文地址: https://segmentfault.com/a/1190000002422996
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞