写点什么

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

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

关注

评论

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

VNC Server for Mac(VNC远程控制软件) v6.11.0激活版

Rose

2025 StartDT Day 发布会全回顾

奇点云

AI

MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕

阿里巴巴云原生

阿里云 Serverless 云原生

基于YOLOv8的坐姿标准姿态检测项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolo

Red Giant Universe for Mac(AE红巨星特效插件包)v2025.3.0激活版

Rose

Topaz ReMask 5 for Mac/win(ps抠图滤镜) 汉化激活版

Rose

AtomGit MCP 服务正式上架

开放原子开源基金会

什么是链游,链游系统开发价格以及方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

0.2秒"神"同步!网易伏羲具身智能全栈方案发布,携手无论科技共拓人形机器人产业新蓝海

网易伏羲

人工智能 智能机器人 网易伏羲 具身智能 有灵众包

工作三年Java程序员的一点点体会与建议

Geek_Yin

Java 程序员 java面试 Java面试题

JAVA实现读取最后几行日志

电子尖叫食人鱼

Java

图片组件|纯血鸿蒙组件库AUI

华哥的全栈次元舱

鸿蒙开发 鸿蒙app开发 AI极客 纯血鸿蒙组件库 免费的低代码平台

Redis持久化机制

量贩潮汐·WholesaleTide

redis

揭秘区块链浏览器开发:从架构到落地的全链路指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

BeeWorks:私有化即时通讯,筑牢企业信息安全防线

BeeWorks

即时通讯 IM 私有化部署

【拥抱鸿蒙】HarmonyOS NEXT实现双路预览并识别文字

郑知鱼

华为 鸿蒙 OCR 移动端开发 HarmonyOS NEXT

人工智能产品测试 | 模型:特征与权重的数据库

测试人

人工智能

音乐可视化编程 Cycling '74 Max for mac 9.0.7(含 RNBO)

Rose

唐尼Downie 4.9.17 多语言版 macOS视频下载器

Rose

Permute 3.13.1 :轻松将您的媒体文件转换为各种不同的格式

Rose

HarmonyOS运动开发:精准估算室内运动的距离、速度与步幅

王二蛋和他的张大花

鸿蒙

DeepSeek-R1-0528正式上线网心科技算力云平台

网心科技

Java面试题及答案整理(金九银十突击版)

Geek_Yin

Java 程序员 java面试 Java面试题

Experience Design中文激活版 for mac(XD界面设计和原型交互工具)

Rose

低代码与传统开发大揭秘,教你快人一步

伤感汤姆布利柏

区块链交易所开发:开启数字货币交易新时代

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 公链开发 代币开发

企业即时通讯平台,助力企业数字化转型的即时通讯工具

BeeWorks

即时通讯 IM 私有化部署

潜入深蓝:SkyEye与中国深海探测技术共振

DevOps和数字孪生

VMware Fusion 12许可密钥 VM虚拟机Mac版

Rose

再赴苍穹!神舟二十号发射取得圆满成功,开启中国航天新篇章

DevOps和数字孪生

航空航天

从概念表达到安全验证:智能驾驶功能迎来系统性规范

DevOps和数字孪生

智能驾驶

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