AICon 上海站|日程100%上线,解锁Al未来! 了解详情
写点什么

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

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

关注

评论

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

干货 | 用JAVA实现多语言翻译组件

LigaAI

Java 国际化

手把手教你,从零开始搭建Spring Cloud Alibaba!这份笔记太牛了

Realtime DB技术详解

安第斯智能云

数据

Uber 多区域 Kafka 的灾难恢复

奔着腾讯去

Apache kafka 分布式

浪潮云说直播间,就在今天!

lsyncd实现文件实时同步

阿呆

lsyncd

11道高频React面试题及详解,另附有React面试题集合

前端依依

面试 大前端 React

如何保障服务器承受亿级流量(12)【限流】

我爱娃哈哈😍

架构设计 架构设计实战

爬虫入门到放弃03:爬虫如何模拟人的浏览行为

叫我阿柒啊

爬虫 代理IP user-agent

网络攻防学习笔记 Day80

穿过生命散发芬芳

网络攻防 7月日更

第七届军博会圆满闭幕,数军科技多项成果获关注

科技热闻

专科程序员与本科程序员之间有什么区别?薪资待遇又差多少?

Java 编程 程序员 架构 面试

去中心化交易所搭建|区块链数字货币交易平台开发

Geek_23f0c3

APP开发 去中心化交易所系统开发 区块链、

Tapdata 与巨杉数据库完成产品兼容互认证

tapdata

Tapdata 巨杉数据库 产品兼容性互认

为什么电脑自带的录屏功能不好用?

淋雨

视频剪辑 Camtasia 专业录屏

2021InfoComm|钉钉会议 Rooms 的 "全场景" 智能化解决方案

阿里云CloudImagine

音视频 钉钉 视频会议 会议 会议室

大数据训练营 - 第二次作业hadoopRPC

西伯利亚鼯鼠

Alibaba永远滴神!阿里内部最新Java基础到中高级核心知识手册

Java~~~

Java 编程 程序员 架构 面试

如何实现70%丢包下音视频的高可用 - 数据篇

ZEGO即构

音视频 数据处理 传输协议 弱网环境高可用 Qo

七种颜色的事件风暴法

escray

学习 极客时间 7月日更 如何落地业务建模

星环研发总监为你揭秘TDH8.0的前因后果 | TDH8.0 使用必读 3

星环科技

数据库 大数据 多模型数据

百度内容风控是怎样在秒级之内完成词表匹配

百度Geek说

百度 内容审核

有奖体验活动,最新1.3版本试用

Geek_6cdeb6

人工智能 机器学习 深度学习 学习 AI

解读新技术,解锁新玩法,HarmonyOS开发者日杭州站等你来参加

科技汇

技术实践 | 网易云信视频转码提速之分片转码

网易云信

智汇华云|安超云套件Archer Cloudsuite为“信创强国”筑基

华云数据

从零开始学习3D可视化之数据对接(1)

ThingJS数字孪生引擎

大前端 可视化 3D 3D可视化 数字孪生

耗时半年,堪称神迹!阿里架构师整合出258W字Java全栈面试题

Java架构追梦

Java 阿里巴巴 面试 java架构 跳槽

完美收官!字节4面斩下2-2Offer,入职就是30K16薪,全凭这套“面试+架构进阶知识点”pdf

Java 程序员 架构 面试

Tapdata 荣获2021中国创新势力榜“最佳数字中台企业服务品牌”大奖

tapdata

Tapdata 最佳数字中台企业服务品牌

天不生我SpringBoot高级笔记 编程万古无常夜!

白亦杨

Java springboot

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