写点什么

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

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

关注

评论

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

32个Spring JPA注解:提供全面的JPA注解应用案例(必须收藏)

肖哥弹架构

Java spring springboot 注解

Python中的偏函数及其广泛应用方式

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言 偏函数

DAPP算力合约代币质押项目系统开发步骤详细及源码

V\TG【ch3nguang】

数字货币交易所/合约跟单/量化合约/合约量化/永续合约/秒合约系统开发详细指南及源码

V\TG【ch3nguang】

HarmonyOS NEXT 地图服务中‘我的位置’功能全解析

白晓明

HarmonyOS NEXT Map Kit 地图服务 显示我的位置

Python开发中,日期时间的相关处理

EquatorCoco

Python 前端

10W数据导入该如何与库中数据去重?

不在线第一只蜗牛

数据库 数据分析

我用 ChatGPT 学 Redis,差点蚌埠住了!

码哥字节

Java redis 底层原理 ChatGPT

一文讲清楚static关键字

EquatorCoco

Java JVM 开发语言

mysql8.0 主从架构模式【0到1架构系列】

快乐非自愿限量之名

MySQL 数据库 架构

sunpump交易所做市机器人

区块链技术

同型号LED全彩屏价格差异的原因

Dylan

价格 LED显示屏 全彩LED显示屏 led显示屏厂家 市场

RFG的崛起:从模因币到价值投资的探索

加密眼界

开发全面覆盖拍卖直播软件平台:移动APP与网页端结合

软件开发-梦幻运营部

mysql索引条件下推 、 count(*)、count(1)、IN 、exists等

百度搜索:蓝易云

Vue状态管理库Pinia详解

不在线第一只蜗牛

Vue 前端

AIGC应用实战营--毕业总结

michael

豆瓣评分7.9!世界级讲师耗时5年整理出的Python学习手册!

我再BUG界嘎嘎乱杀

Python 编程 后端 开发语言

it程序员常用的技术社区网站有哪些

博客趣

技术社区 博科趣 it社区 m.bokequ.com

Docker私有镜像仓库(Harbor)安装

百度搜索:蓝易云

《Programming from the Ground Up》阅读笔记:p95-p102

codists

assembly 编程人

2024-08-24:用go语言,给定一个下标从1开始,包含不同整数的数组 nums,数组长度为 n。 你需要按照以下规则进行 n 次操作,将数组 nums 中的所有元素分配到两个新数组 arr1 和

福大大架构师每日一题

福大大架构师每日一题

NFT数字藏品艺术品系统开发(原理)丨NFT数字藏品艺术品系统开发(案例详解)

V\TG【ch3nguang】

《Programming from the Ground Up》阅读笔记:p103-p116

codists

汇编 编程人

陈星汉和郭炜炜两大制作人首次同台,鸿蒙原生游戏“后发先至”

最新动态

基于Gin框架的HTTP接口限速实践

百度搜索:蓝易云

ubuntu22.04文件管理器nautilus配置默认终端为alacritty

百度搜索:蓝易云

如何使用 vue2+element-ui 处理复杂表单,避免单文件过大的问题

快乐非自愿限量之名

vue.js UI

什么?!90%的ThreadLocal都在滥用或错用!

James_Shangguan

线程池 ThreadLocal #后端 Java并发编程

php解决time()时间戳超过2038年出错问题的解决方案

百度搜索:蓝易云

AIGC应用训练营毕业总结

MiracleWong

训练营 AIGC

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