SIL入門 | try! Swift Tokyo 2018 Day1-2

Swiftのコンパイラは複数のフェーズにわけて実行され、そのうちもっとも大きなものが SILの最適化です。SIL Optimizer はSwift特有のすべての最適化を担うので、SwiftのエンジニアがSILを理解しておくことは極めて重要だと考えます。このトークでは、SILの基礎を簡単な例を用いて説明します。


SIL入門

f:id:niwatako:20180301104050j:plain

Swift中間言語SILの話です

メルカリです

f:id:niwatako:20180301104120j:plain

Swiftコンパイラを学ぶビギナーです

共有すると初学者に役に立つと思いました

f:id:niwatako:20180301104142j:plain

なぜSILを学ぶのか

プロトコルジェネリクスなど素晴らしいものがありますね

Typeシステムの仕組みを学ぶのに良いです

たくさんの最適化がこのフェーズで走っているので最適化に興味があれば良いスターティングポイントです

そして単に楽しいです

f:id:niwatako:20180301104235j:plain

言語固有の表現になります

f:id:niwatako:20180301104243j:plain

コンパイラがあり、パイプラインが

f:id:niwatako:20180301104300j:plain

ソースファイルからASTを作り、SIL、IR、成果物に鳴っていく

SILGen

f:id:niwatako:20180301104323j:plain

サンプルから

f:id:niwatako:20180301104331j:plain

アウトプットします

f:id:niwatako:20180301104339j:plain

見慣れないものがあるかもしれませんが全部理解しなくて良いです

f:id:niwatako:20180301104353j:plain

構造だけで

f:id:niwatako:20180301104413j:plain

どのような最適化がみていきます

f:id:niwatako:20180301104426j:plain

f:id:niwatako:20180301104433j:plain

オリジナルからいくつか変わりました

f:id:niwatako:20180301104439j:plain

こうでも良いですよね

f:id:niwatako:20180301104451j:plain

これがSILの中で起きていることです

f:id:niwatako:20180301104510j:plain

最適化フラグによる差分です

f:id:niwatako:20180301104520j:plain

f:id:niwatako:20180301104526j:plain

これが最適化のマジックです

f:id:niwatako:20180301104542j:plain

f:id:niwatako:20180301104551j:plain

様々な最適化が走っています

まとめです

みなさんの中にはSILが何か理解できないと思っている人もいるかもしれませんが、理解できるものです。

そして私の考えでは、コンパイラの動きを理解するのは重要です

更に深いコンパイラの知識は有益です

f:id:niwatako:20180301104654j:plain

参照情報

f:id:niwatako:20180301104657j:plain

f:id:niwatako:20180301104711j:plain

今日はありがとうございました。メルカリブースに居るのでどうぞお声掛け下さい