写点什么

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

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

关注

评论

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

Web3生态龙头AQUANEE,即将登录Gate等平台

股市老人

Spark Shuffle 原理

Geek_qsftko

大数据 spark

NFT市场进入聚合时代,OKALEIDO成BNB Chain上的首个聚合平台

小哈区块

端午节的咸鸭蛋

红毛丹

前端 6月月更

GameFi新的契机,AQUANEE市场近状一览

西柚子

同步屏障CyclicBarrier

急需上岸的小谢

6月月更

洞见科技承建国家工信安全中心「隐私计算平台」,筑基互联互通生态底座

洞见科技

隐私计算 数据要素

客户之声|携程基于 OceanBase 读写分离方案的探索与优化

OceanBase 数据库

数据库 oceanbase

vue指令-3

小恺

6月月更

数值转换

Jason199

js 数据转换 6月月更

太卷了!腾讯一面被问到内存满了,会发生什么?

Java全栈架构师

Java Linux 程序员 面试 操作系统

Hoo首发上线CloudChat(CC) 推出空投5,000 USDT活动

区块链前沿News

Hoo

KusionStack 开源有感|历时两年,打破“隔行如隔山”困境

SOFAStack

开源 编程语言 语言 #Github 运维‘

极客星球 | 开发者服务合规检测护航企业数字生态建设

MobTech袤博科技

信息安全 开发者服务 安全合规检测 SDK检测 数据健康

社区动态|SelectDB 联合传智教育推出免费 Apache Doris 中文视频教程

SelectDB

Doris 开源社区 Apaache Doris 开源治理

MySql函数

工程师日月

6月月更

NFT市场进入聚合时代,OKALEIDO成BNB Chain上的首个聚合平台

西柚子

盘点:2022年10款比较火的项目管理软件

优秀

项目管理软件

寻找 Web3 的灵魂

CECBC

当Spring邂逅Kafka,有趣的知识增加了

Geek_rze78a

kafka spring 6月月更

数据库每日一题---第5天:变更性别

知心宝贝

数据库 前端 后端 6月月更

Flutter 开发一个通用的购物车数量编辑组件

岛上码农

flutter 安卓开发 ios 开发 跨平台应用 6月月更

建立java和jin函数之间的关系

北洋

6月月更

面向艺术家的Web3商业生态,由OKALEIDO的NFT聚合交易赋能

西柚子

引入区块链技术 是开展碳信息审计的有效举措

CECBC

【LeetCode】马戏团人塔Java题解

Albert

LeetCode 6月月更

通用池化框架GenericKeyedObjectPool性能测试

FunTester

天翼云践行“双碳”目标 “东数西算”绘画绿色发展新蓝图

天翼云开发者社区

架构实战营 - 第 6 期 模块八课后作业

乐邦

「架构实战营」

全国首批“持证上岗”的区块链应用操作员来了

CECBC

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