菜单

JavaScript 处理引擎

相关源文件

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)执行标记化,支持多种语言模式和专门的解析上下文。

Token 处理

组件目的关键类型
T 枚举Token 类型定义t_identifiert_string_literalt_number
LexerType 结构体主要的词法分析器状态机位置跟踪,Token 生成
JSONOptionsJSON 特定解析注释,尾随逗号,转义

词法分析器支持专用模式。

来源:src/js_lexer.zig76-89 src/js_lexer.zig55-74

字符串和数字处理

词法分析器处理复杂的字面量处理,并针对不同内容类型进行了优化。

  • 字符串字面量:UTF-8/UTF-16 编码,转义序列处理,模板字面量支持
  • 数字字面量:IEEE 754 浮点数解析,BigInt 支持,旧八进制检测
  • 正则表达式:带上下文验证的模式和标志解析

来源:src/js_lexer.zig162-164

语法分析

解析器(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 功能。

  • ECMAScript 功能:类、async/await、解构、模块
  • TypeScript 功能:类型、接口、装饰器、命名空间
  • JSX 支持:元素、片段、pragma 检测
  • 高级模式:可选链、空值合并、私有字段

来源:src/js_parser.zig589-798

抽象语法树

AST 系统(js_ast.zig)提供了内存高效的节点存储和操作。

节点类型层次结构

来源:src/js_ast.zig194-230 src/js_ast.zig307-456

内存存储系统

AST 使用专用的Store分配器进行高效批量分配。

来源:src/js_ast.zig41-191

代码转换

转换系统在处理过程中处理各种代码修改。

字符串拼接优化

解析器执行编译时字符串拼接优化。

来源:src/js_parser.zig208-242 src/js_parser.zig257-420

TypeScript 处理

TypeScript 特定转换包括:

  • 类型剥离:移除输出中的类型注解
  • 枚举内联:编译时枚举值替换
  • 装饰器处理:实验性装饰器转换
  • 命名空间处理:模块和命名空间编译

来源:src/js_parser.zig589-942

代码生成

生成器(js_printer.zig)从 AST 生成 JavaScript 代码,并提供各种输出选项。

输出生成流水线

来源:src/js_printer.zig427-497 src/js_printer.zig531-554

输出格式支持

格式目的主要功能
esmES 模块导入/导出语句
cjsCommonJSrequire/module.exports
iife浏览器脚本自执行函数
internal_bake_dev热重载运行时负载包含

来源:src/options.zig563-594

与打包的集成

处理引擎通过 BundleV2 系统与 Bun 的打包器集成。

Worker 线程架构

来源:src/bundler/bundle_v2.zig123-394 src/bundler/bundle_v2.zig216-248

解析任务调度

打包器使用两层线程池系统,以实现最佳的 I/O 和 CPU 利用率。

  • I/O 池:文件读取操作(macOS/Windows 优化)
  • Worker 池:CPU 密集型解析和转换
  • 任务调度:在 I/O 和计算阶段之间自动路由

来源: src/bundler/bundle_v2.zig171-214 src/bundler/bundle_v2.zig216-248