硬汉嵌入式论坛

 找回密码
 立即注册
查看: 29|回复: 1
收起左侧

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

[复制链接]

1万

主题

7万

回帖

12万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
121054
QQ
发表于 昨天 10:54 | 显示全部楼层 |阅读模式
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 格式存储。

【引擎初始化】
[C] 纯文本查看 复制代码
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 代码输出当前已知最大素数

回复

使用道具 举报

82

主题

1420

回帖

1666

积分

至尊会员

积分
1666
发表于 昨天 15:48 | 显示全部楼层
大佬的作品,非常人能及。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2026-2-15 07:03 , Processed in 0.054854 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表