写点什么

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

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

关注

评论

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

精通Java并发锁机制:24种锁技巧+业务锁匹配方案(第二部分)

肖哥弹架构

Java 高并发

人工智能 | 手工测试用例转Web自动化测试生成

测试人

软件测试 软件测试面试

CNCC | 从游戏AI到AOP :虚实融合助推新质生产力

网易伏羲

人工智能 aop 网易伏羲 游戏AI cncc

第三期安全AI挑战者计划-文本分类对抗攻击 第三名“我永远喜欢星野源”技术总结

阿里云天池

巧用时间换空间:解读 ArcGraph 如何灵活应对有限内存下的图分析

Fabarta

图数据库 图计算 图分析 #人工智能

从零开始学机器学习——了解回归

不在线第一只蜗牛

机器学习

仅需6步,实现虚拟物体在现实世界的精准放置

HarmonyOS SDK

HarmonyOS

助力降本增效,ByteHouse打造新一代云原生数据仓库

字节跳动数据平台

数据仓库 云原生 OLAP 降本增效

华为智慧屏 V5 Max 110发布!Audio & HDR Vivid畅享菁彩视听盛宴

最新动态

《春江花月夜》Vivid菁彩视听版,开启一场美学视听盛宴!

最新动态

【程序大侠传】应用内存缓步攀升,告警如影随形

Disaster

DeFi强势回归:新一轮DeFi牛市即将到来?

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 NFT开发 公链开发

博睿数据受邀亮相NebulaGraph Meetup北京站

博睿数据

获取淘宝商品详情数据api接口GET请求访问权限的条件

代码忍者

API 接口 pinduoduo API

2024具身智能大会 | 网易伏羲负责人范长杰博士:群体智能引领AI通向物理世界

网易伏羲

人工智能 aop 网易伏羲 具身智能 群体智能

合同管理中的常见陷阱,你是否也中招了?

天津汇柏科技有限公司

低代码 合同管理 AI 人工智能

浅析数字孪生与数字卫星发展史

DevOps和数字孪生

卫星

Footprint Analytics 集成 Sui 区块链数据:助力 Move 生态系统的未来

Footprint Analytics

blockchain Sui

C2C交易系统开发DApp组成架构详解

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

mac苹果电脑虚拟机推荐:VMware Fusion Pro for Mac 下载

你的猪会飞吗

VMware Fusion Pro VMware Fusion Pro 13 mac VMware Fusion Pro 12

【免费大屏】JimuReport 积木仪表盘 v1.8.1 首个集成版本发布

JEECG低代码

域管理员账号被锁定解决办法

ServiceDesk_Plus

AD域 域管理

百度搜索结果波动的极致治理

百度Geek说

MLPerf 放榜,中国 AI 存储公司焱融科技斩获多项世界第一

焱融科技

AI 高性能存储 MLPerf

从API到数据:京东商品详情一键获取的奥秘

技术冰糖葫芦

API Gateway API 接口 API 测试 pinduoduo API

这个软件开发工具私活必备,后端程序员也能一键搞定各端APP、小程序

Onegun

finclip

使用豆包MarsCode 实现高可用扫描工具

TRAE

人工智能 程序员 AI 开发 智能化

探索MySQL中VARCHAR(255)的演变及其对数据库设计的影响

Steven

程序员如何构建自己的话语体系?——用当量

思码逸研发效能

编程 程序员 软件开发 代码 绩效考核

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