Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
2015-08-09 18:12
525 查看
原文链接:http://ourjs.com/detail/duktape-%E4%B8%80%E4%B8%AA%E6%96%B0%E7%9A%84%E5%B0%8F%E5%B7%A7%E7%9A%84%E8%B6%85%E7%B2%BE%E7%AE%80%E5%8F%AF%E5%B5%8C%E5%85%A5%E5%BC%8Fjavascript%E5%BC%95%E6%93%8E
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的范例作为参考. 下面是一个简单的例子:
2 初始化上下文(context)
初始化并在你的程序中使用Duktape
3 添加C语言函数绑定(function bindings)
在Ecmascript(JavaScript)代码中调用C语言的函数,首先要声明你的C函数:
注册你的函数, 例如,放到global对象中:
然后你就可以在Ecmascript中调用这个函数:
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$ ./testHello 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 */
相关文章推荐
- Js获取当前日期时间及其它操作
- javascript------【八】
- JavaScript 注释规范
- js闭包总结
- js删除一个div的方法
- JSP执行过程详解
- jstl表达式--------【七】
- javascript onclick跳转链接网页
- jsp-----【六】
- js实现table新增,删除行
- 02_03 JSP内置对象之page
- js高程3笔记
- 02_02 JSP内置对象之四种属性范围
- js
- jsp实现简单的登录与注销功能
- JavaScript我学之七数组
- Jsp中复选框的全选与反选
- JavaScript学习笔记——DOM_对document对象的内容、属性、样式的操作
- JSCover+WebDriver/Selenium获得JS 代码覆盖
- javascript 解析ajax返回的xml和json格式的数据