Swift Compiler Architecture (Swiftコンパイラの構造)

Swiftがオープンソースになって公開された資料の中で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/Analysislib/SILOptimizer/ARClib/SILOptimizer/LoopTransformslib/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中間言語の、ひとまず入り口手前まで


コメント

このブログの人気の投稿

Swiftのコンパイルエラー寄せ集め

Swift2.2からSwift3.0への変換を行ってみて

AVAudioSession細かいことまとめ(late 2014)