今年もLINE Developer Day 2017に行ってきました!!
本記事はswiftのコンパイラについてざっくり全体図を解説するInside of Swiftのまとめになります!
Inside of Swift
繪面友香様
- Swift5ではswift4で間に合わなかったapiの安定を狙っている
- 公式レビューが必要になった
- 公式ドキュメントに詳しい説明はあるが、ざっくりしたものがないので、swift自身を触り始める話をします
- swiftのコンパイラのイメージを掴んで何をしているかがわかるようにする
環境構築
- ソースコードとビルドに使うツールがあればよい
- swift+関連プロジェクトを作る必要あり
- xcodeを触る場合は、一部ビルドが対応していない場合があるのでコマンドで作成する
- ビルドして動作確認できるが、スクリプトが用意されている
- build-script -Rでリリースビルドになるが、ビルド時間が短縮できる
- 1時間位かからないくらいで構築はできます
構成のイメージ
- コード解析の流れとして、lvmrに変換するまでの流れ
- ソースコード(text)を意味や文法を理解しながらtokenにして、木構造にする。このとき木構造にできないとエラーになる
- 意味解析を作り、型情報を作っていく。ここで型推論をしていく
- ASPをもとにswift中間言語(lmvrとの)を生成する
- その後変数を初期化しているかなど不動制御の制約をみたり、arcの最適化が行われる
- 最後にllvmに変換する
- 処理結果をみるコマンドもあります
イメージを固める
- stdlibの中に標準ライブラリがあり、libの中にソースがある
- 標準ライブラリにはgybとswiftがあるが、gybは最終的にswiftに変換される
- gybについて、RangeとClosedRangeについて、extensionが後ほど生成される
- コンパイラのソース部分はそれぞれの役割をみればプロジェクトのどのへんをみればいいかがわかる
その他
- proposal SE0011について
- protocolのassociatedtypeを宣言するときに、名前がわかりづらかったので変更するもの
- 構文解析と文字解析が変わっていると予想されるが、tokenの定義やideのサポートなどが変更されている
まとめ
- 環境構築やビルド、必要スクリプトは準備済み
- 流れが整理されているので眺めやすいです
コンパイラの挙動をなんとなくざっくりつかめるセッションでした。
コンパイラに弱い@mogmetには中々理解が難しいですが、これからswiftにPR送ってみたい人には参考になるかもしれません!
View Comments
Your article gave me a lot of inspiration, I hope you can explain your point of view in more detail, because I have some doubts, thank you. 20bet