Sway 编译器是 Fuel 工具链的核心组件,负责将 Sway 源代码转换为 Fuel 虚拟机可执行的字节码。本文档概述了编译器的架构、编译管道和关键组件。有关调用编译器的 Forc CLI 工具的信息,请参阅Forc 工具。
Sway 编译器遵循传统的、多阶段的编译管道,并包含一些针对区块链开发领域的特定语言增强功能。
编译器围绕几个核心“引擎”构建,这些引擎在编译过程中维护全局状态
来源:sway-core/src/lib.rs1-78, sway-core/src/engine_threading.rs
让我们更详细地探讨编译过程的每个阶段
解析阶段将源代码转换为结构化表示
解析的主要入口点是 parse 在 sway-core/src/lib.rs 中的函数。
语义分析阶段将已解析的 AST 转换为类型化的 AST
此阶段涉及的主要组件是
TypeCheckContext:包含类型检查期间所需的上下文信息Namespace:管理符号和作用域TraitMap:跟踪各种类型的特质实现来源:sway-core/src/semantic_analysis/ast_node/mod.rs1-321 sway-core/src/semantic_analysis/type_check_context.rs1-120 sway-core/src/semantic_analysis/namespace/trait_map.rs1-150
IR 生成阶段将类型化的 AST 转换为中间表示
IR 生成的核心是 FnCompiler 结构体,它负责将 Sway 代码转换为 IR。
来源:sway-core/src/ir_generation/function.rs1-90 sway-core/src/ir_generation/compile.rs1-75 sway-core/src/ir_generation/const_eval.rs1-100
最后阶段优化 IR 并生成汇编
在此阶段,编译器还执行控制流分析以检测死代码和不可达路径。
来源:sway-core/src/control_flow_analysis/dead_code_analysis.rs1-100
类型系统是 Sway 编译器最关键的组件之一
关键组件
类型系统处理泛型、特质约束和类型推断等复杂功能。
来源:sway-core/src/type_system/engine.rs1-35 sway-core/src/type_system/id.rs1-60 sway-core/src/type_system/info.rs1-78
声明引擎管理声明及其引用
声明引擎
来源:sway-core/src/semantic_analysis/ast_node/declaration/declaration.rs1-50 sway-core/src/language/ty/declaration/declaration.rs1-50
The TypeCheckContext 在类型检查期间维护状态
主要职责
来源:sway-core/src/semantic_analysis/type_check_context.rs38-145
表达式类型检查是语义分析的核心部分
类型检查过程
来源:sway-core/src/semantic_analysis/ast_node/expression/typed_expression.rs290-617 sway-core/src/semantic_analysis/ast_node/expression/typed_expression/method_application.rs28-100
函数编译将类型化的 Sway 代码转换为 IR
The FnCompiler
来源: sway-core/src/ir_generation/function.rs151-252 sway-core/src/ir_generation/function.rs325-400
无效代码分析可以发现永远无法执行的代码
来源: sway-core/src/control_flow_analysis/dead_code_analysis.rs27-98 sway-core/src/control_flow_analysis/dead_code_analysis.rs100-187
常量求值
来源: sway-core/src/ir_generation/const_eval.rs62-189 sway-core/src/ir_generation/const_eval.rs218-226
编译器使用“引擎线程”系统在整个编译过程中传递核心引擎
引擎被传递给各种编译器组件,以提供
来源: sway-core/src/lib.rs69-77 sway-core/src/engine_threading.rs
Trait 系统
来源: sway-core/src/semantic_analysis/namespace/trait_map.rs151-250
Sway 编译器是一个复杂的系统,可将 Sway 源代码转换为 Fuel VM 字节码。其多阶段流水线执行全面的分析和优化,以确保在 Fuel 区块链平台上的类型安全和高效执行。
有关 Sway 生态系统其他组件的更多详细信息,请参阅
来源: sway-core/src/lib.rs sway-core/src/semantic_analysis/ast_node/mod.rs sway-core/src/ir_generation/function.rs