[译] Swift 编译器
Posted 萌面大道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[译] Swift 编译器相关的知识,希望对你有一定的参考价值。
- by kingcos
|
|
|
|
Swift 主仓库[3]中包含了 Swift 编译器和标准库的源代码、相关组件,如 SourceKit(用于 IDE 集成),以及 Swift 回归测试套件和实现级别的文档。
Swift 驱动库[4]中包含了 Swift 编译器驱动(Driver)的新版实现,目的是替换现有编译器驱动,以增强可扩展性、可维护性以及鲁棒性(Robust)。
编译器架构
整体而言,Swift 编译器的主要职责在于将 Swift 源代码翻译为高效执行的机器码。但是 Swift 编译器的前端同样支持许多其它工具,包括与 IDE 集成的语法高亮、代码补全、以及其它提供便利的工具。本文对 Swift 编译器的主要组件提供了高阶描述:
•解析(Parsing):解析器是一个简易的递归下降解析器(在 lib/Parse[5] 中实现),并带有完整手动编码的词法分析器。•语义分析(Semantic Analysis):语义分析阶段(在 lib/Sema[6] 中实现)负责获取已解析的 AST(抽象语法树)并将其转换为格式正确且类型检查完备的 AST,以及在源代码中提示出现语义问题的警告或错误。语义分析包含类型推断,如果可以成功推导出类型,则表明此时从已经经过类型检查的最终 AST 生成代码是安全的。•Clang 导入器(Clang Importer):Clang 导入器(在 lib/ClangImporter[7] 中实现)负责导入 Clang 模块,并将导出的 C 或 Objective-C API 映射到相应的 Swift API 中。最终导入的 AST 可以被语义分析引用。•SIL 生成(SIL Generation):Swift 中间语言(Swift Intermediate Language,SIL)是一门高级且专用于 Swift 的中间语言,适用于对 Swift 代码的进一步分析和优化。SIL 生成阶段(在 lib/SILGen[8] 中实现)将经过类型检查的 AST 弱化为所谓的「原始」SIL。SIL 的设计在 docs/SIL.rst[9] 有所描述。•SIL 保证转换(SIL Guaranteed Transformations):SIL 保证转换阶段(在 lib/SILOptimizer/Mandatory[10] 中实现)负责执行额外且影响程序正确性的数据流诊断(比如使用未初始化的变量)。这些转换的最终结果是「规范」SIL。•SIL 优化(SIL Optimizations):SIL 优化阶段(在 lib/Analysis[11]、lib/ARC[12]、lib/LoopTransforms[13] 以及 lib/Transforms[14] 中实现)负责对程序执行额外的高级且专用于 Swift 的优化,包括(例如)自动引用计数优化、去虚拟化、以及通用的专业化。•LLVM IR 生成(LLVM IR Generation):IR 生成阶段(在 lib/IRGen[15] 中实现)将 SIL 弱化为 LLVM LR,此时 LLVM 可以继续优化并生成机器码。
扩展内容
┌──────────┐ ┌─────────┐ ┌────────────┐
│Swift Code│────▶│Swift AST│────▶│Raw Swift IL│──┐
└──────────┘ └─────────┘ └────────────┘ │
│
┌────────┐ ┌───────┐ ┌──────────────────┐ │
┌──│Assembly│◀───│LLVM IR│◀───│Canonical Swift IL│◀─┘
│ └────────┘ └───────┘ └──────────────────┘
│
│ ┌──────────┐
└─▶│Executable│
└──────────┘
References
[1]
Swift.org: https://swift.org[2]
Swift Compiler: https://swift.org/swift-compiler[3]
Swift 主仓库: https://github.com/apple/swift[4]
Swift 驱动库: https://github.com/apple/swift-driver[5]
lib/Parse: https://github.com/apple/swift/tree/master/lib/Parse[6]
lib/Sema: https://github.com/apple/swift/tree/master/lib/Sema[7]
lib/ClangImporter: https://github.com/apple/swift/tree/master/lib/ClangImporter[8]
lib/SILGen: https://github.com/apple/swift/tree/master/lib/SILGen[9]
docs/SIL.rst: https://github.com/apple/swift/blob/master/docs/SIL.rst[10]
lib/SILOptimizer/Mandatory: https://github.com/apple/swift/tree/master/lib/SILOptimizer/Mandatory[11]
lib/Analysis: https://github.com/apple/swift/tree/master/lib/SILOptimizer/Analysis[12]
lib/ARC: https://github.com/apple/swift/tree/master/lib/SILOptimizer/ARC[13]
lib/LoopTransforms: https://github.com/apple/swift/tree/master/lib/SILOptimizer/LoopTransforms[14]
lib/Transforms: https://github.com/apple/swift/tree/master/lib/SILOptimizer/Transforms[15]
lib/IRGen: https://github.com/apple/swift/tree/master/lib/IRGen
以上是关于[译] Swift 编译器的主要内容,如果未能解决你的问题,请参考以下文章