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 代码输出当前已知最大素数
相关推荐
zfyljx29 分钟前
Taro+react input框在文字中间插入光标会跳到末尾问题
javascript·react.js·taro
Lana学习中1 小时前
[AI编程]纯前端JS实现评论区自动截图&生成 PDF
前端·javascript·pdf·vibe coding
~无忧花开~1 小时前
React事件处理全解析
开发语言·前端·javascript·react.js·前端框架
英俊潇洒美少年1 小时前
豆包官方开放 API 调用指南(合法稳定版)
前端·javascript
漠月瑾-西安1 小时前
JavaScript 字符串处理技巧:substring 与 indexOf 的灵活组合
javascript·前端开发·indexof·代码优化·substring·字符串处理
海上彼尚1 小时前
Nuxt4 官网访问来源统计的实现
开发语言·前端·javascript
三*一1 小时前
mapbox 基于 Turf.js 实现高精度多边形分割(支持带空洞 / 坐标无损)
开发语言·前端·javascript·vue.js·mapbox gl
漂移的电子1 小时前
【常用】element-ui/moment.js/echarts.js等
javascript·ui·echarts
姓蔡小朋友1 小时前
Agent Skill设计模式
开发语言·javascript·设计模式
yaaakaaang2 小时前
(五)前端,如此简单!---变量
前端·javascript