写点什么

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

  • 2014-12-10
  • 本文字数:1013 字

    阅读完需:约 3 分钟

软件可能正在吞噬世界,而 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 上。使用过的开发者都对其丰富的文档赞口不绝。

查看英文原文: JavaScript on a Toaster: Embedded JavaScript with Duktape

2014-12-10 12:046588
用户头像
臧秀涛 略懂技术的运营同学。

发布了 300 篇内容, 共 144.1 次阅读, 收获喜欢 35 次。

关注

评论

发布
暂无评论
发现更多内容

现货合约一键自动跟单app系统开发搭建(api对接)

开发v-hkkf5566

面试造飞机?GitHub顶级“java面试手册2023”(统计通过率95%)

三十而立

Java

基于飞桨实现的特定领域知识图谱融合方案:ERNIE-Gram文本匹配算法

飞桨PaddlePaddle

直面风口,未来不仅是中文版ChatGPT,还有AGI大时代在等着我们

加入高科技仿生人

人工智能 AI 低代码 数智化 AGI

腾讯2022年度研发大数据报告:研发人员占比74%,新增研发项目超7000个

科技热闻

软件测试/测试开发丨Pb协议的接口测试

测试人

软件测试 自动化测试 测试开发

软件测试/测试开发丨接口协议之抓包分析 TCP 协议

测试人

软件测试 自动化测试 测试开发

瓴羊Quick BI,让企业运营提效的好工具

对不起该用户已成仙‖

看起来很简单的二维码巡检,究竟是怎么实现的?

草料二维码

小程序 二维码 表单 设备巡检

智能健康管理正当时,脉冲技术的一次自证与他证

脑极体

skg 按摩仪

如何自动化测试你的接口?—— Rest Assured

JAVA旭阳

Java springboot

dubbo Triple 统一参数验证

昵称不能为null

dubbo triple协议 参数验证

架构实战 - 模块 9 毕业项目

mm

#架构实战营

8个不能错过的程序员必备网站,惊艳到我了!!!

引迈信息

前端

python进阶:带你学习实时目标跟踪

华为云开发者联盟

Python 人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

阿里云资深技术专家闫卫斌:打造具备极致容灾能力的对象存储

云布道师

阿里云 云存储

组装式应用新趋势:小程序技术科提高软件开发效率

FinFish

小程序容器 组装式应用 小程序技术

PyTorch 深度学习实战 |用TensorFlow训练神经网络

TiAmo

神经网络 tensorflow MNIST

谁能让企业运营快速提效,那当然瓴羊Quick BI

巷子

OpenAI创始人:GPT-4的研究起源和构建心法

OneFlow

人工智能 深度学习 ChatGPT Greg Brockman

深入了解 JavaScript 内存泄漏

京东科技开发者

JavaScript 前端 内存 计算

PopupWindow(悬浮框)的基本使用

芯动大师

android AlertDialog PopupWindow

蚁人与量子停车场

白洞计划

AI 智慧停车场

软件测试/测试开发丨RPC接口测试技术-Tcp 协议的接口测试

测试人

软件测试 自动化测试 测试开发

NFT质押借贷平台开发系统DApp搭建

薇電13242772558

NFT

面试造飞机? 网易在职顶级大佬“java面试真题 2023” (助上岸)

三十而立

Java 内联类初探

三十而立

Java

如何将营销模板以小程序的形式上架至App?

FinFish

小程序容器 小程序技术 营销模板

for 循环嵌套 for 循环,你需要懂的代码性能优化技巧!

三十而立

Java

政企中小微客户业务一线支撑赋能

鲸品堂

通信 运营商 电信运营商 企业号 3 月 PK 榜

探索大语言模型垂直化训练技术和应用-陈运文

NLP资深玩家

人工智能 ChatGPT

Duktape:在C/C++项目中嵌入JavaScript_JavaScript_David Iffland_InfoQ精选文章