写点什么

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

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

关注

评论

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

模块四:课后作业

黄先生

架构训练营

数据挖掘从入门到放弃(三):朴素贝叶斯

数据社

机器学习 5月日更

SaaS的前世、今生与未来[下篇]

LigaAI

SaaS

perf + 火焰图用法 小结

hashyong

程序员 架构 5月日更 perf

我的Serverless实战—玩转腾讯云Wordpress

liuzhen007

Serverless 5月日更

你习惯写注释吗?

ES_her0

5月日更

下周极客时间课程学习计划

IT蜗壳-Tango

5月日更

架构实战营模块4作业

En wei

架构实战营

zstd c++ string 压缩&解压

hashyong

c++ 程序员 架构 5月日更 zstd

网络攻防学习笔记 Day16

穿过生命散发芬芳

5月日更 网络攻防

🍃【Spring原理系列】让你知道真正的“AOP”

码界西柚

spring aop 面向切面 spring aop 5月日更

模块四作业

c

架构实战营

<精益创业>读后感

Bruce Talk

敏捷 随笔 Agile

用 Python 打印九九乘法表 - DAY7

Qien Z.

Python 5月日更

架构实战训练营 - 模块4 - 作业

Presley

cri-o技术探秘3

xumc

Docker 容器 cri-o pinns

小谈音视频质量检测

箭上有毒

音视频 5月日更

MySQL 数据库学习笔记(2)

lenka

5月日更

垄断

小天同学

商业 市场垄断 5月日更

IOS端音频的采集与播放

floer rivor

音视频

SimpleDateFormat线程不安全的5种解决方案!

王磊

Java 后端 5月日更

行车数据上链,国产汽车很上道

CECBC

图像灰度与灰阶的纠结:gray level/scale译文释义

老猿Python

灰度 图形图像处理 数字图像处理 灰阶 gray scale

Python 正则表达式

若尘

正则表达式 正则 Python编程 5月日更

Golang 别名类型

escray

学习 极客时间 Go 语言 5月日更

系统思考力建立3个简单操纵方法

风翱

系统性思考 5月日更

Python 之父爆料:明年至少令 Python 提速 1 倍!

Python猫

Python

模块4作业

Geek_2e7dd7

架构训练

一文看懂 slice

Rayjun

Go 语言

重学Scrum三大支柱 《Scrum指南》重读有感(1)

Bruce Talk

Scrum 敏捷 随笔 Agile

K8s二开之 client-go 初探

雪雷

Kubernetes Go 语言

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