QEMU & FFmpeg作者Fabrice Bellard推出MicroQuickJS,一款面向嵌入式系统JavaScript引擎,仅需10K RAM

https://github.com/bellard/mquickjs/tree/main

由于是极简实现,源码的里面的数学库文件libm.c和一些字符处理问题,也非常值得借鉴学习,完全不依赖其它C库的独立实现,非常适合整理出来自己使用,用在M0,M3等资源有限的芯片很合适。

【介绍】
MicroQuickJS(又名 MQuickJS 或 MQuickJS)是一款面向嵌入式系统的 JavaScript 引擎。它可以在仅 10 kB RAM 的条件下编译并运行 JavaScript 程序。整个引擎(包含 C 标准库)大约需要 100 kB 的 ROM(ARM Thumb-2 代码)。其运行速度与 QuickJS 相当。MQuickJS 仅支持接近 ES5 的 JavaScript 子集。它实现了一种更严格的模式,禁止某些容易出错或效率低下的 JavaScript 结构。尽管 MQuickJS 与 QuickJS 共享大量代码,但其内部实现不同,以减少内存占用。尤其是,它采用了追踪式垃圾回收器,虚拟机不使用 CPU 栈,并且字符串以 UTF-8 格式存储。

【引擎初始化】

|-----------|------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 | JSContext *ctx; uint8_t mem_buf[8192]; ctx = JS_NewContext(mem_buf, ``sizeof``(mem_buf), &js_stdlib); ... JS_FreeContext(ctx); |

引擎不会分配系统内存。

【内存管理】
与 QuickJS 类似,但因使用压缩式垃圾回收器,有重要区别:
1、不需要显式释放 JSValue。
2、对象地址可能在分配时移动。
3、避免在 C 中直接存储 JSValue,应使用 JSValue 指针。
4、使用 JS_PushGCRef() 和 JS_PopGCRef() 管理引用。

定义 DEBUG_GC 可强制对象移动,用于调试。

【标准库】
标准库通过工具 mquickjs_build.c 编译为 C 结构,可驻留在 ROM 中。实例化速度快,占用 RAM 极少。示例文件:mqjs_stdlib.c
mqjs_stdlib.h
example.c

【数学库与浮点模拟】
MQuickJS 自带精简数学库(libm.c)。若 CPU 无浮点支持,还包含浮点模拟器,体积可能小于 GCC 提供的版本。

【编译器】
解析器接近 QuickJS。
1、避免递归,C 栈使用可控。
2、无抽象语法树。
3、单遍生成字节码。

【作者简介】

作者Fabrice Bellard无敌厉害,属于是开源界的顶级大神行列。

  1. JSLinux,最早支持在浏览器中运行完整 Linux 系统的模拟器
  2. Micro QuickJS,面向微控制器的轻量级 JavaScript 引擎
  3. TSAC,一种超低比特率音频压缩算法
  4. ts_zip,基于大型语言模型的文本压缩工具
  5. ts_sms,基于大型语言模型的短信压缩方案
  6. TextSynth Server,提供大型语言模型 REST API 的推理服务器
  7. NNCP,曾在大型文本压缩基准中排名第一的无损压缩算法
  8. QuickJS,体积小巧但功能完整的 JavaScript 引擎
  9. TextSynth,大型语言模型在线推理服务平台
  10. 2018 IOCCC 图像解码器,极度精简且混淆的图像解码实现
  11. LibBF,支持任意精度浮点数的轻量级数学库
  12. TinyPI,可计算数百万位圆周率的极简程序
  13. X Window / Windows 2000 浏览器运行方案,在网页中运行完整操作系统
  14. TinyEMU,小型 RISC-V 与 x86 模拟器
  15. SoftFP,实现 IEEE 754-2008 标准的浮点仿真库
  16. BPG,基于 HEVC 的高压缩率图像格式
  17. 软件实现 4G LTE / 5G NR / NB-IoT 基站,纯软件运行于普通 PC 的蜂窝基站系统
  18. ASN.1 编译器,生成小型高效 C 代码的协议编译器
  19. JavaScript PC 模拟器,在浏览器中启动 Linux 的完整 PC 模拟方案
  20. 2.7 万亿位圆周率计算,使用桌面电脑完成的超大规模 π 计算
  21. PC 显示器电视信号生成,在普通电脑上生成模拟与 DVB-T 数字电视信号
  22. QEMU,通用机器模拟器与虚拟化系统
  23. FFmpeg,开源多媒体处理系统
  24. TCC,世界上最小且完整的 C 编译器
  25. TCCBOOT,可在 15 秒内编译并启动 Linux 内核的极速引导方案
  26. QEmacs,轻量级 Emacs 克隆编辑器
  27. OTCC,世界上最小的自编译 C 编译器
  28. TinyGL,小型快速的 OpenGL 子集实现
  29. 在线科学计算器,支持复杂数学运算的网页计算工具
  30. 圆周率公式与算法,涵盖 π 的高效计算方法
  31. 最大素数打印程序,用极简 C 代码输出当前已知最大素数
相关推荐
kyriewen10 小时前
你的代码仓库变成“毛线团”了?Monorepo 用 Turborepo 拆成“乐高积木”
前端·javascript·面试
openKaka_12 小时前
createRoot 到底创建了什么:FiberRootNode 和 HostRootFiber 的初始化过程
前端·javascript·react.js
阿豪只会阿巴13 小时前
【没事学点啥】TurboBlog轻量级个人博客项目——项目介绍
javascript·python·django·html
刀法如飞14 小时前
TypeScript 数组去重的 20 种实现方式,哪一种你还不知道?
前端·javascript·算法
_风满楼15 小时前
TDD实战-会议室冲突检测的红绿重构循环
前端·javascript·算法
Rkgua16 小时前
JS中的惰性函数基本介绍
前端·javascript
客场消音器16 小时前
我用两周半 Vibe Coding 做了一个前额叶训练的微信小程序
前端·javascript·后端
不考研当牛马18 小时前
HTML CSS 新手大全初学者必看 (含有部分 JavaScript)
javascript·css·html
卷帘依旧18 小时前
Promise链式调用原理
前端·javascript
threelab18 小时前
Three.js 图像粒子飞线效果 | 三维可视化 / AI 提示词
开发语言·javascript·人工智能