资讯专栏INFORMATION COLUMN

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

jeyhan / 2813人阅读

摘要:是一个可嵌入的引擎,主要关注便携性和精简及紧凑性。很容易集成到项目添加和到您的中,并使用从代码中,调用代码的功能,反之亦然。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/87670.html

相关文章

  • javascript功能插件大集合,写前端的亲们记得收藏

    摘要:一个专注于浏览器端和兼容的包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。完全插件化的工具,能在中识别和记录模式。健壮的优雅且功能丰富的模板引擎。完整的经过充分测试和记录数据结构的库。 【导读】:GitHub 上有一个 Awesome – XXX 系列的资源整理。awesome-javascript 是 sorrycc 发起维护的 JS 资源列表...

    cfanr 评论0 收藏0
  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    netmou 评论0 收藏0
  • javascript功能插件大集合 前端常用插件 js常用插件

    摘要:转载来源包管理器管理着库,并提供读取和打包它们的工具。能构建更好应用的客户端包管理器。一个整合和的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。很棒的组件集合。隐秘地使用和用户数据。 转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具。•npm – npm 是 javasc...

    Hydrogen 评论0 收藏0
  • JavaScript 资源大全中文版

    摘要:官网全新的静态包管理器。官网一个整合和官网的最佳思想,使开发者能快速方便地组织和编写前端代码的下一代包管理器。官网小巧的兼容的所见即所得的富文本编辑器。官网富文本编辑器。官网由制作,适用于每天写作的富文本编辑器。 1. 包管理器 管理着 javascript 库,并提供读取和打包它们的工具。 npm:npm 是 javascript 的包管理器。官网 cnpm:cnpm 是 由于国...

    jzman 评论0 收藏0
  • 国外程序员整理的Java资源大全

    摘要:日期和时间处理日期和时间的函数库。使用中可观察序列,创建异步基于事件应用程序的函数库。为分布式系统提供延迟和容错处理。发布使用本机格式分发应用程序的工具。将程序资源和打包成和的本机文件。图像处理用来帮助创建评估或操作图形的函数库。 好资源要分享原文 译者 唐尤华 翻译自 github akullpp 构建 这里搜集了用来构建应用程序的工具。 Apache Maven:Mave...

    chengtao1633 评论0 收藏0

发表评论

0条评论

jeyhan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<