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 */
目录
相关文章
|
2月前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
55 1
|
3月前
|
JavaScript 前端开发 Java
JS引擎V8
【10月更文挑战第9天】
39 0
|
5月前
|
Web App开发 JavaScript 前端开发
什么是JavaScript引擎
【8月更文挑战第14天】什么是JavaScript引擎
115 1
|
7月前
|
XML 缓存 JavaScript
一篇文章讲明白JS模板引擎之JST模板
一篇文章讲明白JS模板引擎之JST模板
64 2
|
8月前
|
JavaScript 前端开发 NoSQL
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行
【5月更文挑战第11天】MongoDB 的 JavaScript 引擎允许在服务器端直接执行脚本,提升效率并实现定制化操作。脚本环境提供独立但与数据库关联的运行空间,引擎负责脚本的解析、编译和执行。执行过程包括脚本提交、解析、编译和执行四个步骤。掌握脚本逻辑设计和 JavaScript 语言特性对于高效利用这一功能至关重要。例如,通过脚本可以计算商品总销售额,增强数据库操作的灵活性。
133 1
【MongoDB 专栏】MongoDB 的 JavaScript 引擎与脚本执行
|
7月前
|
缓存 自然语言处理 前端开发
深入剖析JavaScript引擎的工作原理
【6月更文挑战第3天】JavaScript引擎由解析器、解释器、优化器和垃圾回收器组成,它们协同完成代码的解析、编译和执行。解析器将源代码转为抽象语法树(AST),编译阶段进行作用域分析和变量提升。解释器执行AST,优化器在代码频繁执行时进行即时编译以提高性能。垃圾回收器自动回收不再使用的内存,防止泄漏。理解这些原理有助于优化代码和提升Web应用性能。
65 1
|
8月前
|
JavaScript 前端开发 Go
8 大博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比
探索各类博客引擎:Jekyll、Hugo、Hexo、Pelican、Gatsby、VuePress、Nuxt.js和Middleman的对比,包括语言、模板引擎、速度、社区活跃度等。了解每种引擎的优缺点,助你选择合适的博客构建工具。查看详细文章以获取更多实战和安装指南。
|
8月前
|
JavaScript 前端开发 开发者
Vue.js深度解析:前端开发的生产力引擎
Vue.js深度解析:前端开发的生产力引擎
118 0
|
JavaScript 前端开发 算法
带你读《现代Javascript高级教程》十一、JavaScript引擎的垃圾回收机制(1)
带你读《现代Javascript高级教程》十一、JavaScript引擎的垃圾回收机制(1)
|
JavaScript 前端开发 算法
带你读《现代Javascript高级教程》十一、JavaScript引擎的垃圾回收机制(2)
带你读《现代Javascript高级教程》十一、JavaScript引擎的垃圾回收机制(2)