写点什么

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

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

关注

评论

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

在线最大公因数计算器

入门小站

工具

详解物联网Modbus通讯协议

华为云开发者联盟

物联网 通信 Modbus 通讯协议 TCP通信

Android技术分享| 【自习室】自定义View代替通知动画(1)

anyRTC开发者

android 音视频 WebRTC 在线教育 移动开发

主数据与主数据管理(数据治理)

KoLee

数据治理 数字化 主数据管理 主数据

架构实战营_模块六作业_拆分电商系统为微服务

Rabbit

构建数字合作格局 赋能政企行业通信——首届WECC 2021即将召开

融云 RongCloud

音视频 IT, 通信 通信云 会议

J2PaaS低代码平台的开源,将进一步助力企业数字化

J2PaaS低代码平台

低代码 低代码开发 低代码开发平台

解读鸿蒙轻内核的监控器:异常钩子函数

华为云开发者联盟

鸿蒙 钩子函数 任务栈 OpenHarmony 异常钩子函数

分布式缓存技术

黄敏

Vue进阶(幺叁陆):el-steps 实现页面内导航

No Silver Bullet

Vue 10月月更

听首歌的时间,简单复习下 python 网络编程之 socket,美不美?滚雪球学python第4季14篇

梦想橡皮擦

10月月更

DataOps(数据运维)指南 - 数据管理的新时代

码界行者

DataOps

架构实战营模块5课后作业

apple

【Flutter 专题】29 图解自定义底部状态栏 ACEBottomNavigationBar (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 10月月更

在Vue中使用JSX,很easy的

华为云开发者联盟

JavaScript Vue Vue3 JSX 渲染函数

写给初学者,一文搞懂大数据学习、岗位、面试及简历

五分钟学大数据

大数据

Elasticsearch 快照相关(qbit)

qbit

Elasticsearch 分片速度、进度及故障排查(qbit)

qbit

elasticsearch shard

19. 删除链表的倒数第N个数(链表)

黄敏

架构实战营 - 模块五作业

Alex.Wu

字节、快手、阿里、腾讯这两年的广告推荐技术进展

博文视点Broadview

linux之sudo使用技巧汇总

入门小站

Linux

千万级学生管理系统的考试试卷存储方案

刘琦Logan

【Vuex 源码学习】第十三篇 - Vuex 辅助函数的实现

Brave

源码 vuex 10月月更

每个数据工程师都应该知道的 6 个 SQL 查询

云原生

sql 职业生涯 数据工程师

【LeetCode】 山峰数组的顶部Java题解

Albert

算法 LeetCode 10月月更

016云原生之安全技术

穿过生命散发芬芳

云原生 10月月更

微博评论高性能高可用计算架构

刘琦Logan

架构实战营 - 模块五作业

en

#架构实战营

安全稳定便捷! 融云赋能“轻云会议”满足政府在线会议需求

融云 RongCloud

云计算 音视频 通信 会议 视频云

WhatsApp 如何启用端到端加密备份数据

CatTalk

facebook 安全 端到端加密

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