JavaScript 处理引擎涵盖了 Bun 解析、转换和生成 JavaScript 和 TypeScript 代码的完整流程。该系统处理词法分析、语法解析、AST 操作、代码转换以及独立转译和打包操作的输出生成。
有关协调此引擎的更广泛的打包系统的信息,请参阅 核心 JavaScript 运行时。有关 API 表面细节,请参阅 JavaScript API 表面。
JavaScript 处理引擎遵循传统的编译器流水线架构,拥有专门的组件,用于高性能的 JavaScript/TypeScript 处理。
来源:src/js_lexer.zig src/js_parser.zig src/js_ast.zig src/js_printer.zig
该引擎使用专用的内存分配策略来优化 AST 处理。
来源:src/js_ast.zig41-191 src/bundler/bundle_v2.zig274-394
词法分析器(js_lexer.zig)执行标记化,支持多种语言模式和专门的解析上下文。
| 组件 | 目的 | 关键类型 |
|---|---|---|
T 枚举 | Token 类型定义 | t_identifier、t_string_literal、t_number |
LexerType 结构体 | 主要的词法分析器状态机 | 位置跟踪,Token 生成 |
JSONOptions | JSON 特定解析 | 注释,尾随逗号,转义 |
词法分析器支持专用模式。
来源:src/js_lexer.zig76-89 src/js_lexer.zig55-74
词法分析器处理复杂的字面量处理,并针对不同内容类型进行了优化。
解析器(js_parser.zig)实现了递归下降解析器,并提供广泛的 JavaScript 和 TypeScript 语言支持。
解析器使用集中式分配策略,并附带辅助方法。
| 方法 | 目的 | 返回值 |
|---|---|---|
p.e() | 分配表达式节点 | Expr |
p.b() | 分配绑定节点 | Binding |
p.s() | 分配语句节点 | Stmt |
来源:src/js_parser.zig167-180 src/js_parser.zig409-456
解析器支持广泛的 JavaScript 和 TypeScript 功能。
AST 系统(js_ast.zig)提供了内存高效的节点存储和操作。
来源:src/js_ast.zig194-230 src/js_ast.zig307-456
AST 使用专用的Store分配器进行高效批量分配。
转换系统在处理过程中处理各种代码修改。
解析器执行编译时字符串拼接优化。
来源:src/js_parser.zig208-242 src/js_parser.zig257-420
TypeScript 特定转换包括:
生成器(js_printer.zig)从 AST 生成 JavaScript 代码,并提供各种输出选项。
来源:src/js_printer.zig427-497 src/js_printer.zig531-554
| 格式 | 目的 | 主要功能 |
|---|---|---|
esm | ES 模块 | 导入/导出语句 |
cjs | CommonJS | require/module.exports |
iife | 浏览器脚本 | 自执行函数 |
internal_bake_dev | 热重载 | 运行时负载包含 |
处理引擎通过 BundleV2 系统与 Bun 的打包器集成。
来源:src/bundler/bundle_v2.zig123-394 src/bundler/bundle_v2.zig216-248
打包器使用两层线程池系统,以实现最佳的 I/O 和 CPU 利用率。
来源: src/bundler/bundle_v2.zig171-214 src/bundler/bundle_v2.zig216-248