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 代码输出当前已知最大素数
相关推荐
小李子呢02118 小时前
前端八股Vue---Vue2和Vue3的区别,set up的用法
前端·javascript·vue.js
邂逅星河浪漫9 小时前
【银行内网开发-管理端】Vue管理端+Auth后台开发+Nginx配置+Linux部署(详细解析)
linux·javascript·css·vue.js·nginx·html·前后端联调
星空椰9 小时前
JavaScript 进阶基础:函数、作用域与常用技巧总结
开发语言·前端·javascript
奔跑的呱呱牛9 小时前
@giszhc/vue-page-motion:Vue3 路由动画怎么做才“丝滑”?(附在线示例)
前端·javascript·vue.js
gCode Teacher 格码致知10 小时前
Javascript提高:小数精度和随机数-由Deepseek产生
开发语言·javascript·ecmascript
冴羽12 小时前
请愿书:Node.js 核心代码不应该包含 AI 代码!
前端·javascript·node.js
mmmmm1234212 小时前
深入 DOM 查询底层:HTMLCollection 动态原理与 querySelectorAll 静态快照解析
前端·javascript
淸湫13 小时前
前端JavaScript:数据类型、实例对象 、内置对象、构造函数之间的关系
javascript
别看我只是一直狼13 小时前
从观察者模式到 RxJS:让复杂的异步逻辑变得优雅又舒服
javascript
|晴 天|13 小时前
我如何用Vue 3打造一个现代化个人博客系统(性能提升52%)
前端·javascript·vue.js