为何Duktape成跨平台嵌入式JavaScript引擎顶流?

前有科技后进阶 2024-10-16 04:22:49

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

什么是 Duktape

Duktape - embeddable Javascript engine with a focus on portability and compact footprint

Duktape 是一个可嵌入的 Javascript 引擎,专注于可移植性和紧凑空间占用。Duktape 非常易于集成到 C/C++ 项目中,开发者只需要将 duktape.c、duktape.h 和 duk_config.h 添加到构建中,并使用 Duktape API 从 C 代码调用 ECMAScript 函数即可,反之亦然。

Duktape 的主要功能包括:

可嵌入、可移植、紧凑、符合 ECMAScript E5/E5.1 标准部分语义且从 ES2015+ 更新部分支持 ECMAScript 2015 (ES6) 和 ECMAScript 2016 (ES7) 等功能支持 ES2015 TypedArray 和 Node.js Buffer 绑定支持 WHATWG Encoding API 现行标准支持内置调试器、正则表达式引擎、Unicode最小平台依赖性、结合引用计数和标记清除垃圾收集、协程字节码转储 / 加载用于缓存编译函数、可选日志记录框架、基于 CommonJS 的模块加载实现、CBOR 绑定等

目前 Duktape 在 Github 通过 MIT 协议开源,有超过 6k 的 star、1k 的 fork、代码贡献者 60+、是一个值得关注的前端开源项目。

如何使用 Duktape

在应用程序中嵌入 Duktape 时,开发者可以使用 duktape.org/download.html 提供的打包源分发包。

分发包 src/ 目录包含 duk_config.h 配置标头和 Duktape 默认配置的合并源。如有必要,可以使用 python tools/configure.py 创建自定义配置选项的标头和源,例如要启用 fastint 支持(Linux 示例):

$ tar xvfJ duktape-2.0.0.tar.xz$ cd duktape-2.0.0$ rm -rf src-custom$ python tools/configure.py \ --source-directory src-input \ --output-directory src-custom \ --config-metadata config \ -DDUK_USE_FASTINT# src-custom/ will now contain: duktape.c, duktape.h, duk_config.h.

开发者还可以使用 vcpkg(vcpkg 是一个免费的 C/C++ 包管理器,用于获取和管理库) 依赖项管理器下载并安装 Duktape:

$ git clone https://github.com/Microsoft/vcpkg.git$ cd vcpkg$ ./bootstrap-vcpkg.sh$ ./vcpkg integrate install$ vcpkg install duktape

如果开发者打算更改 Duktape 内部结构并希望在 Linux、macOS 或 Windows 中重建可分发的源代码,可以参考下面的方式处理:

// Linux 上使用 pip 安装,Node.js >= 16.x$ sudo apt-get install python python-yaml$ python util/dist.py// macOS 平台系统// 安装 Python 2.7.x、Node.js >= 16.x$ pip install PyYAML$ python util/dist.py// Windows 平台安装 Python 2.7.x 并添加到 PATH 中,Node.js >= 16.x> pip install PyYAML> python util\dist.py

更多关于 Duktape 的用法和示例可以参考文末资料,文本不再过多展开。

参考资料

https://github.com/svaarala/duktape

https://vcpkg.io/en/

https://blog.grijjy.com/2018/02/28/javascripting-with-duktape-for-delphi/

https://medium.com/@piyushsingh0992/what-is-a-javascript-engine-d0c944d2f24d

https://www.pinterest.jp/pin/duktapecr-evaluate-javascript-from-crystal--439734351130936141/

1 阅读:45

前有科技后进阶

简介:感谢大家的关注