写点什么

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:046880
用户头像
臧秀涛 略懂技术的运营同学。

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

关注

评论

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

SLS Copilot 实践:基于 SLS 灵活构建 LLM 应用的数据基础设施

阿里巴巴云原生

阿里云 云原生 sls

如何设计一个高性能、不可篡改的选票系统——以美国总统选举为例

测试人

电商小程序开发,打通物流端的终极大招之API接口

快递鸟

喜报!网易灵动荣获2025全球数贸创新大赛机器人赛道金奖

网易伏羲

智慧矿山 网易伏羲 工程机械 网易灵动

原生 App 的开发费用

北京木奇移动技术有限公司

APP开发 软件外包公司 APP外包

婚纱摄影小程序管理系统:助力摄影商家数字化运营新方案

微擎应用市场

华为坤灵分销伙伴“百&万计划”全面启航,首批10家分销钻石伙伴获得授牌

极客天地

如何像顶尖产品主理人一样思考?掌握这五个黄金维度

星云低代码中间件

软件 业务系统 企业系统

当游戏NPC有了“灵魂”,网易伏羲解码游戏智能交互场景新实践

网易伏羲

网易伏羲 游戏AI 逆水寒手游 新倩女幽魂

海外社交媒体监控为舆情监测注入增长动能

沃观Wovision

社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

Raft 中的 IO 执行顺序:内存状态与持久化状态的陷阱

Databend

企业如何选择私有化部署的即时通讯(IM)系统?

BeeWorks

即时通讯 IM 私有化部署

DeepSeek-V3.2的DSA稀疏注意力技术:在TPU平台上的效能革命与适配实践

中昊芯英

人工智能 tensorflow TPU 大语言模型 DSA

【隐语SecretFLow隐私计算】纵向联邦算法 SecureBoost Benchmark——SGB性能测试报告

隐语SecretFlow

算法 联邦学习 隐私计算 可信隐私计算评测

如何通过内核版本检查判断FreeBSD是否需要重启

qife122

freebsd 内核更新

2025 年 9 月《大模型 SQL 能力排行榜》发布

爱可生开源社区

sql LLM

拼叨叨砍价系统:实体店低成本引流的营销利器

微擎应用市场

一种智能调度分布式路径计算解决方案

天翼云开发者社区

CDN 安全加速

事件驱动重塑 AI 数据链路:阿里云 EventBridge 发布 AI ETL 新范式

阿里巴巴云原生

阿里云 云原生 EventBridge

一佳教育培训课程系统小程序:一站式教育数字化解决方案

微擎应用市场

Playwright MCP入门指南:从零开始构建自动化测试

测吧(北京)科技有限公司

添加DNS解析记录需要注意哪些事项?(国科云)

防火墙后吃泡面

医院更衣室外来物种:全新自动发衣系统,比你效率高

斯科信息

斯科信息 RFID自动发衣系统 RFID智能发衣机

流量突然提升100倍QPS,怎么办?

测试人

思科SRv6 实现 VPN+流量工程测试

天翼云开发者社区

网络

舆情监测的全球协同:本土洞察与海外社交媒体监控的闭环管理

沃观Wovision

社交媒体 沃观Wovision 舆情监测系统 海外舆情监测

等保合规日志 “暗礁” 识别:5个常见错误+规避方法

运维有小邓

日志管理 日志审计 等保20 Syslog日志管理

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名AI代理框架需求洞察

qife122

开源项目 AI开发

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