QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

Github已星标180K又一神作,阿里巴巴内部并发编程笔记

Java 程序员 后端

HTTP 2,实战篇

Java 程序员 后端

Elasticsearch查询速度为什么这么快?看啥?问你呢

Java 程序员 后端

Elasticsearch聚合学习之二:区间聚合,java中高级面试题大全

Java 程序员 后端

Flink1,java从入门到精通第四版pdf下载

Java 程序员 后端

docker-compose下的java应用启动顺序两部曲之二:实战

Java 程序员 后端

IDEA开发Spark应用实战(Scala),java高级开发简历

Java 程序员 后端

HTML笔记 —— 表单,java数组的底层原理

Java 程序员 后端

Dubbo面试题,mybatis架构图

Java 程序员 后端

Google 面试六轮游,结果还是没过!Google面试真题分享

Java 程序员 后端

HashMap(jdk1,linux学习路线图

Java 程序员 后端

Hadoop分布式高可用HA集群搭建笔记(含Hive之构建)

Java 程序员 后端

jackson学习之六:常用类注解,java编程思想第五版电子书

Java 程序员 后端

elasticsearch实战三部曲之二:文档操作,java基础填空题

Java 程序员 后端

git(8)Git 与其他系统,高性能mysql第四版pdf百度云

Java 程序员 后端

git(9)Git 内部原理,nginx模块工作原理

Java 程序员 后端

Git,GitHub与GitLab的区别,java框架开发面试题

Java 程序员 后端

鸿蒙生态的2021:像犀牛在丛林飞

脑极体

Docker系列(3)--容器连接和Dockerfile,kafka的原理

Java 程序员 后端

爽!字节大佬DDD(领域驱动设计)巅峰之作,拆解业务代码真好用

编程 程序员 字节

Github神作!2021Java秋招高级面试指南,吃透至少阿里P6

Java 程序员 后端

HashMap底层实现原理及面试问题,linux服务器搭建教程视频

Java 程序员 后端

HCIE云计算--灾备,万字总结

Java 后端

Docker 从入门到实践系列三 - Docker 常用命令

Java 程序员 后端

ECMAScript6(ES6)基础语法,linux基础及应用教程第二版

Java 程序员 后端

flex 布局详解,我是如何收割多家大厂offer的

Java 程序员 后端

第 2 周作业

波波

「架构实战营」

Flink on Yarn三部曲之一:准备工作,java开发校招面试题

Java 程序员 后端

DL4J实战之五:矩阵操作基本功,微服务架构技术栈

Java 程序员 后端

Elasticsearch聚合学习之五:排序结果不准的问题分析

Java 程序员 后端

github搜索技巧小结,深入理解JVM

Java 程序员 后端

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