Fabrice Bellard,那位神级程序员、FFmpeg之父、QuickJS之父、QEMU之父、TCC之父、圆周率仙人,大约两周前开放了一个新的项目,MicroQuickJS。做到了在10KB内存裸机(baremetal)运行(受限的)JavaScript。MicroQuickJS 发布的时候没有RISC-V的支持,但是现在,来自中国大陆的 wujun51227开发者已经完成了对RISC-V32和RISC-V64的支持,代码已经开源:
https://github.com/wujun51227/mquickjs_rv_baremetal/
修改部分主要是baremetal 运行时候需要处理的 syscall 部分,以及一个 RISC-V 定制的链接脚本。代码diff可以通过文末的链接看到。
以下简介来自MicroQuickJS项目README文件:
MicroQuickJS(简称MQuickJS)是一款面向嵌入式系统的JavaScript 引擎。它只需占用低至10 KB 的内存即可编译和运行JavaScript 程序。整个引擎(包括C 库)所需的ROM 空间约为100 KB(ARM Thumb-2 代码)。其运行速度与QuickJS 相当。
MQuickJS仅支持接近ES5 标准的JavaScript 子集。它实现了一种更严格的模式,禁止使用一些容易出错或效率低下的JavaScript 语法结构。
尽管MQuickJS 与QuickJS 共享大量代码,但其内部实现有所不同,以降低内存消耗。特别是,它采用追踪式垃圾回收器,虚拟机不使用CPU 堆栈,并且字符串以UTF-8 格式存储。
diff url:
https://github.com/bellard/mquickjs/compare/main...wujun51227:mquickjs_rv_baremetal:main
https://x.com/conoro/status/2004085226369323506