Swift Compiler Architecture (Swiftコンパイラの構造)
Swiftがオープンソースになって公開された資料の中でSwiftのコンパイラについて書かれている部分を抜粋し、日本語に訳す。意味がわからないところは(?)を付けた。
参考
Swiftの構文解析の流れを超ざっくり追ってみる
Swiftのコンパイラを改造して独自構文を追加する
Swiftオープンソース化の衝撃
Swiftコンパイラの構造と基盤テクニック
オープンソースSwiftにコントリビュートしよう
2016/06/25の技術書典でSwiftの本を出します
Swift Internal Introduces サポートページ
Swift中間言語の、ひとまず入り口手前まで
Compiler and Standard Library
The main Swift repositoryにはSwiftのコンパイラとスタンダードライブラリのソースコードがあります。Compiler Architecture
Swiftで書かれたソースコードからLLVM IRに変換される工程です。上から下に流れていきます。- Parsing (lib/Parse) : parserはソースコードをAbstract Syntax Tree (AST)に変換します。ここでは意味の情報も、型の情報も扱いません。ソースに文法の問題があるときはメッセージを出します。
- Semantic analysis (lib/Sema) : parseされたASTを整形された型チェック済みのASTに変換します。意味の問題があるときはメッセージを出します。ここには型推論が含まれます。
- Clang importer (lib/ClangImporter) : Clang modulesをインポートします。そしてCやObjective-CのAPIと対応するSwiftのAPIをmapします(?)
- SIL generation (lib/SILGen) : Swift Intermediate Language (SIL)とはSwift用の中間言語で、さらなる分析と最適化に適しています。SIL generationは型チェック済みのASTを"生の"SILに"レベル下げ"します。
- SIL guaranteed transformations (lib/SILOptimizer/Mandatory : 変数の初期化などのデータの流れを診断します。この工程を終えると“canonical(正式な)” SILとなります。
- SIL Optimizations (lib/SILOptimizer/Analysisとlib/SILOptimizer/ARCとlib/SILOptimizer/LoopTransformsとlib/SILOptimizer/Transforms) : ARCなどの最適化を行います。devirtualization(?)やgeneric specialization(?)も行います。
- LLVM IR Generation (lib/IRGen) : IR generationはSILをLLVM IRに"レベル下げ"します。ここからLLVMによる最適化と機械語生成へと続いていきます。
参考
Swiftの構文解析の流れを超ざっくり追ってみる
Swiftのコンパイラを改造して独自構文を追加する
Swiftオープンソース化の衝撃
Swiftコンパイラの構造と基盤テクニック
オープンソースSwiftにコントリビュートしよう
2016/06/25の技術書典でSwiftの本を出します
Swift Internal Introduces サポートページ
Swift中間言語の、ひとまず入り口手前まで
コメント
コメントを投稿