文章摘要
MicroQuickJS是一个面向嵌入式系统的JavaScript引擎,仅需10KB内存和100KB存储空间即可运行,性能接近QuickJS。它支持接近ES5的JavaScript子集,采用更严格的模式禁用易错或低效语法。与QuickJS相比,其内部机制经过优化以降低内存消耗,使用追踪垃圾回收机制,虚拟机不依赖CPU栈,字符串以UTF-8存储。提供mqjs命令行工具支持代码评估和交互模式。
文章总结
MicroQuickJS 简介
MicroQuickJS(简称 MQuickJS)是一款专为嵌入式系统设计的 JavaScript 引擎。其特点包括:
核心特性
- 超低内存需求:仅需 10kB RAM 即可运行 JavaScript 程序,完整引擎占用约 100kB ROM(ARM Thumb-2 架构)
- 性能表现:与 QuickJS 引擎相当
- 语言支持:兼容 ES5 标准的严格子集模式,禁用易错和低效语法结构
- 技术改进:采用追踪垃圾回收机制、UTF-8 字符串存储等优化设计
交互环境
提供 mqjs 命令行工具,支持:
- 内存限制运行(示例:./mqjs --memory-limit 10k test.js)
- 字节码预编译(-o 参数输出二进制文件)
- 跨平台兼容(支持 32/64 位字节码转换)
严格模式规范
基础限制:
- 强制使用严格模式
- 禁止数组空洞(如
[1,,3]会报错) - 仅支持全局
eval
特殊规范:
javascript a = []; a[10] = 2; // 报错(需改用普通对象)
技术实现
- 内存管理:自主内存分配器,无需依赖 C 标准库
- 值存储:
- 32位系统采用 32 位值存储
- 支持 31 位整数/单码点字符/浮点数混合存储
- 标准库:预编译为 ROM 可执行结构,启动极快
兼容性说明
- 支持 ES5 核心功能 + 有限 ES6 特性(如
for...of) - 特殊限制:
- 正则表达式仅支持 ASCII 大小写转换
- 日期功能仅保留
Date.now()
测试与授权
- 提供基础测试套件和 Octane 基准测试
- 采用 MIT 开源协议(主要开发者:Fabrice Bellard 和 Charlie Gordon)
注:本文保留了原始技术规格和关键示例,删除了重复的代码片段和次要实现细节。
评论总结
评论总结:
- 技术可行性验证
- baudaux成功将quickJS编译为WebAssembly,计划对MicroQuickJS进行相同操作 引用:"I easily managed to build quickJS to WebAssembly...So I need to do the same for MicroQuickJS" "我已成功将quickJS编译为WebAssembly...需要对MicroQuickJS进行相同操作"
- 项目背景质疑
- timschumi指出该项目基于QuickJS且缺乏提交历史,降低了原创性价值 引用:"this was based on QuickJS anyway, making it a moot comparison" "该项目本就是基于QuickJS的,这种比较没有意义"
- 开发者赞誉
- booi高度赞扬开发者Fabrice Bellard的编程能力 引用:"If there were a software engineering hall of fame, I nominate Fabrice" "如果有个软件工程名人堂,我提名Fabrice"
- 网络生态愿景
- alcover期待建立更轻量级的网络标准体系 引用:"reboot the Web with a super light standard...A new Web that adheres to the above" "用超轻量标准重启网络...建立符合上述标准的新网络"