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无敌厉害,属于是开源界的顶级大神行列。
- JSLinux,最早支持在浏览器中运行完整 Linux 系统的模拟器
- Micro QuickJS,面向微控制器的轻量级 JavaScript 引擎
- TSAC,一种超低比特率音频压缩算法
- ts_zip,基于大型语言模型的文本压缩工具
- ts_sms,基于大型语言模型的短信压缩方案
- TextSynth Server,提供大型语言模型 REST API 的推理服务器
- NNCP,曾在大型文本压缩基准中排名第一的无损压缩算法
- QuickJS,体积小巧但功能完整的 JavaScript 引擎
- TextSynth,大型语言模型在线推理服务平台
- 2018 IOCCC 图像解码器,极度精简且混淆的图像解码实现
- LibBF,支持任意精度浮点数的轻量级数学库
- TinyPI,可计算数百万位圆周率的极简程序
- X Window / Windows 2000 浏览器运行方案,在网页中运行完整操作系统
- TinyEMU,小型 RISC-V 与 x86 模拟器
- SoftFP,实现 IEEE 754-2008 标准的浮点仿真库
- BPG,基于 HEVC 的高压缩率图像格式
- 软件实现 4G LTE / 5G NR / NB-IoT 基站,纯软件运行于普通 PC 的蜂窝基站系统
- ASN.1 编译器,生成小型高效 C 代码的协议编译器
- JavaScript PC 模拟器,在浏览器中启动 Linux 的完整 PC 模拟方案
- 2.7 万亿位圆周率计算,使用桌面电脑完成的超大规模 π 计算
- PC 显示器电视信号生成,在普通电脑上生成模拟与 DVB-T 数字电视信号
- QEMU,通用机器模拟器与虚拟化系统
- FFmpeg,开源多媒体处理系统
- TCC,世界上最小且完整的 C 编译器
- TCCBOOT,可在 15 秒内编译并启动 Linux 内核的极速引导方案
- QEmacs,轻量级 Emacs 克隆编辑器
- OTCC,世界上最小的自编译 C 编译器
- TinyGL,小型快速的 OpenGL 子集实现
- 在线科学计算器,支持复杂数学运算的网页计算工具
- 圆周率公式与算法,涵盖 π 的高效计算方法
- 最大素数打印程序,用极简 C 代码输出当前已知最大素数