Duktape:在C/C++项目中嵌入JavaScript

简介:

软件可能正在吞噬世界,而JavaScript又可能正在吞噬软件世界。凭借可以嵌入到任何C/C++项目中的、完整兼容ECMAScript 5的引擎,Duktape使得JavaScript超越了浏览器或服务器的界限。

Duktape较小的代码库、简单的构建系统,使其非常适合嵌入在其他系统中使用。从技术角度看,它本质上和Lua项目很像,但是它运行的JavaScript却有着更大的生态系统和更多的开发者。——Tim Caswell

尽管Lua并不比JavaScript年长多少,但是JavaScript在浏览器中、在服务器上(通过node.js),无处不在,从而获得了更大的认可。对于想嵌入一门脚本语言的项目,Duktape支持使用一种非常流行的语言及其生态系统。Duktape项目的创建者Sami Vaarala指出,“最初动机就是想为JavaScript创建一个类似Lua的实现。”

使用Duktape非常简单,只需要把duktape.c和duktape.h添加到项目中。JavaScript和C之间的绑定是双向的,所以可以相互调用。“Hello World!”示例如下:

#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;
}

Tim Caswell摘取了Duktape的核心,用Dukluv加以扩展,创建了一个较小的“针对小型设备的类node.js环境”。Caswell提到,他的项目加入了libuv到Duktape的绑定:

使得Duktape可以访问操作系统,从而成为一个支持非阻塞I/O、定时器(timer)、子进程,并支持加载libuv所提供的有用的工具函数的完整通用编程环境。

需要嵌入脚本语言的需求并不新鲜。电子游戏已经这么干了好多年了,比如魔兽世界就使用了Lua,用于定制界面。Stack Overflow上有一个很受欢迎的回答指出,Lua之所以常用,原因在于:

Lua很小,可移植,而且是用ANSI C实现的,易于修改;容易嵌入到其他项目中,好扩展,而且对于游戏开发者最重要的是,运行时占用的内存非常少。

像SpiderMonkey和V8等浏览器引擎也可以嵌入在其他项目中,但是它们很庞大,不适合小型应用。Caswell说,对于简单的任务或低功率的机器,它们“太过重量级”了。Espruino项目也为微控制器提供了JavaScript,但是它和ECMAScript的兼容性只在95%左右,而Duktape是完全兼容的。

Duktape基于MIT许可协议开源,源代码托管在GitHub上。使用过的开发者都对其丰富的文档赞口不绝。

目录
相关文章
|
2月前
|
JavaScript 前端开发 安全
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
85 4
|
2月前
|
CDN
如何在项目中使用Moment.js库?
如何在项目中使用Moment.js库?
WK
|
2月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
142 1
|
3月前
|
JavaScript 测试技术 API
跟随通义灵码一步步升级vue2(js)项目到vue3版本
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有显著提升。本文介绍了如何利用通义灵码逐步将 Vue 2 项目升级到 Vue 3,包括备份项目、了解新特性、选择升级方式、升级依赖、迁移组件和全局 API、调整测试代码等步骤,并提供了注意事项和常见问题的解决方案。
157 4
|
3月前
|
JavaScript 前端开发 测试技术
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
JavaScript与TypeScript:为何TypeScript成为大型项目的首选
43 1
|
3月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
3月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
911 3
|
3月前
|
存储 JavaScript 前端开发
Vue.js项目中全面解析定义全局变量的常用方法与技巧
Vue.js项目中全面解析定义全局变量的常用方法与技巧
74 0
|
3月前
|
JavaScript 前端开发
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信
|
4月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台