限时领|《AI 百问百答》专栏课+实体书(包邮)! 了解详情
写点什么

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

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

关注

评论

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

ClickHouse利器—如何提高留存计算速度

行者AI

数据库

百度京Fun生活节 双旦福利HIGH 翻全城

DT极客

深入浅出Android!2021京东最新Android面试真题解析,震撼来袭免费下载!

欢喜学安卓

android 程序员 面试 移动开发

如何使用mock应对测试所需随机数据

华为云开发者联盟

测试 数据 Mock

Java中的常量

cdhqyj

Java

Linux基本操作命令

行者AI

Linux

破除数据垄断,数据上链或是关键

CECBC

区块链 大数据

架构师 3 期 3 班 -week6- 作业

zbest

作业 week6

我从 HX 辞职了

看山

辞职 闲聊

实用流程工具,浅析LR.NET配置型工作流引擎

雯雯写代码

.net 工作流

北京一咖啡店启动数字人民币应用场景测试 店员:目前处于内测阶段

CECBC

数字人民币

ClickHouse数据导入

一粒

kafka Logstash Clickhouse

ClickHouse常见集群部署架构

一粒

nosql 架构 Clickhouse

牛笔了!难道Android真的凉了?Android面试题及解析

欢喜学安卓

android 程序员 面试 移动开发

真香系列!大牛耗时一年最佳总结,让你的app体验更丝滑!建议收藏

欢喜学安卓

android 程序员 面试 移动开发

第一张区块链完税证明在深圳开出,区块链政务应用再获突破

CECBC

区块链 电子证明

华为云·云享专家李万龙: IoT 梦想,从0到1的实现

华为云开发者联盟

技术 物联网 IoT

架构师训练营知识点整理

garlic

架构师训练营第 1 期

架构师 3 期 3 班 -week6- 总结

zbest

总结 week6

2020中国低代码平台市场发展年度报告(深度分析)

J2PaaS低代码平台

软件 低代码 开发工具 SaaS/IaaS/PaaS 软件开发、

一周信创舆情观察(12.21~12.27)

统小信uos

Vmware+Ubuntu 配置静态IP

千泷

Rust布道者张汉东倾授,入门Rust初学者都要攻破哪些难点?

华为云开发者联盟

学习 rust 语言

云挖矿APP系统开发|云挖矿软件开发

系统开发

Flink Forward Asia 2020 -- Keynote 总结

Apache Flink

flink

架构师训练营大作业

Gosling

架构师训练营第 1 期

wildfly 21的配置文件和资源管理

程序那些事

程序那些事 web服务器 应用配置 服务器部署

写出一手烂代码的19条准则

Java架构师迁哥

软件测试——网络协议知识(二)

测试人生路

软件测试 网络通信协议

仅4步,就可通过SQL进行分布式死锁的检测与消除

华为云开发者联盟

数据库 sql 死锁

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