写点什么

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

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

关注

评论

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

第三周总结

Linuxer

架构师培训营第三周总结

王锟

「架构师训练营」第 3 周 学习总结

guoguo 👻

极客大学架构师训练营

探探上当代单身青年的倔强

脑极体

命题作业—第三周

于江水

极客大学架构师训练营

KairosDB Client使用总结

二哥不再迷茫

百度CTO的故事中,藏着中国AI的底色

脑极体

设计模式是架构师的必备武器

老姜

第 3 周 - 学习总结

大海

第三周学习总结

赵龙

「架构师训练营」第 3 周作业

旭东(Frank)

极客大学架构师训练营 作业

环信大学:AI赋能万亿"618",0成本轻松5步开启您的智慧客服之旅

DT极客

架构师训练营第三周课后作业

Cloud.

第三周作业

田振宇

老板不断加需求、改需求的四种应对方法

金刚小书童

项目管理 需求管理

单例模式的三种

王锟

新基建核心技术人才缺口将达420万

CECBC

新基建 人才缺口 核心技术人才

架构师训练营第三周学习总结

不谈

极客大学架构师训练营

架构师训练营——第三周作业

jiangnanage

架构师训练营第三周课后作业

不谈

极客大学架构师训练营

职能合约将如何在未来掀起一场革命?

CECBC

智能合约 区块链技术 去中心化 防篡改 自动执行

第三周作业

赵龙

第三章 课后作业

姜 某某

几种设计模式的使用场景

Acker飏

极客大学架构师训练营

架构师三期作业

老姜

关于区块链的那些事,看完可以防忽悠

CECBC

分布式 区块链技术 共识与信任

案例篇:服务吞吐量下降很厉害,怎么分析?

程序员老王

Apache Zeppelin:可能是开源届最好的Flink开发平台

Geek_8o1tcx

大数据 flink 流计算 Zeppelin

数据库周刊29│2020数据库研究报告;Oracle取消今年技术大会;腾讯云DBbridge发布支持一键迁库;饿了么迁至阿里云;PG数组查询;Oracle被比特币勒索;DM8 安全管理…

墨天轮

MySQL 数据库 postgresql 腾讯云 阿里云

学习总结—第三周

于江水

极客大学架构师训练营

单例模式和组合模式练习

jason

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