Hasty Briefsbeta

双语

Ohm's Peg-to-WASM Compiler

2 months ago
  • #WebAssembly
  • #parsing
  • #performance
  • Ohm 是一个用于 JavaScript 和 TypeScript 的解析工具包,适用于自定义文件格式或构建语言工具。
  • 版本 18 是一次完全重写,将语法编译为 WebAssembly,相比先前版本实现了超过 50 倍的速度提升和仅 10% 的内存占用。
  • 先前版本采用 AST 解释和 PExpr 树,其中解析表达式通过诸如 'eval' 的方法进行评估。
  • 新引擎将语法编译为 WebAssembly,避免了解释开销并内联表达式代码。
  • CST 节点通过 Wasm 线性内存中的碰撞分配器管理,采用基于区域的管理方式以降低开销。
  • 终端节点通过标记化的 32 位值进行优化,避免每个字符的单独分配。
  • 分块绑定使用固定大小的块,通过消除数组大小调整并使回溯成本低廉来提升性能。
  • 记忆化采用块稀疏表高效存储解析结果,条目打包为 i32 值。
  • 参数化规则通过静态特化处理,为每个参数组合生成唯一的规则体。
  • 优化的空格跳过避免在需要之前为空白字符创建 CST 节点,从而提升许多语法解析的性能。
  • 额外优化包括单次使用规则内联和预分配固定结构元素的节点。
  • 该版本以 beta 形式通过 npm 发布,并感谢资助者和贡献者,如 Alex Warth。