Hacker News 中文摘要

RSS订阅

法布里斯·贝拉尔发布MicroQuickJS -- Fabrice Bellard Releases MicroQuickJS

文章摘要

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. 基础限制

    • 强制使用严格模式
    • 禁止数组空洞(如 [1,,3] 会报错)
    • 仅支持全局 eval
  2. 特殊规范javascript a = []; a[10] = 2; // 报错(需改用普通对象)

技术实现

  • 内存管理:自主内存分配器,无需依赖 C 标准库
  • 值存储
    • 32位系统采用 32 位值存储
    • 支持 31 位整数/单码点字符/浮点数混合存储
  • 标准库:预编译为 ROM 可执行结构,启动极快

兼容性说明

  • 支持 ES5 核心功能 + 有限 ES6 特性(如 for...of
  • 特殊限制:
    • 正则表达式仅支持 ASCII 大小写转换
    • 日期功能仅保留 Date.now()

测试与授权

  • 提供基础测试套件和 Octane 基准测试
  • 采用 MIT 开源协议(主要开发者:Fabrice Bellard 和 Charlie Gordon)

注:本文保留了原始技术规格和关键示例,删除了重复的代码片段和次要实现细节。

评论总结

评论总结:

  1. 技术可行性验证
  • baudaux成功将quickJS编译为WebAssembly,计划对MicroQuickJS进行相同操作 引用:"I easily managed to build quickJS to WebAssembly...So I need to do the same for MicroQuickJS" "我已成功将quickJS编译为WebAssembly...需要对MicroQuickJS进行相同操作"
  1. 项目背景质疑
  • timschumi指出该项目基于QuickJS且缺乏提交历史,降低了原创性价值 引用:"this was based on QuickJS anyway, making it a moot comparison" "该项目本就是基于QuickJS的,这种比较没有意义"
  1. 开发者赞誉
  • booi高度赞扬开发者Fabrice Bellard的编程能力 引用:"If there were a software engineering hall of fame, I nominate Fabrice" "如果有个软件工程名人堂,我提名Fabrice"
  1. 网络生态愿景
  • alcover期待建立更轻量级的网络标准体系 引用:"reboot the Web with a super light standard...A new Web that adheres to the above" "用超轻量标准重启网络...建立符合上述标准的新网络"