型推論のビルドが遅いらしいから調べてみる

これは [Swift Tweets](https://swift-tweets.github.io/) の発表をまとめたものです。イベントのスポンサーとして Qiita に許可をいただいた上で、このような形（ツイートの引用）で投稿しています。

--------

[Twitterのハッシュタグはこちら](https://twitter.com/hashtag/swtws?f=tweets&vertical=default&src=hash)

--------

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">&quot;型推論のビルドが遅いらしいから調べてみる&quot; by <a href="https://twitter.com/jpmartha_jp">@jpmartha_jp</a><br>最近では iOS 界隈だけでなく Twitter や Instagram でもパンケーキさんと呼ばれていて、絵文字ができたことを喜んでいます。よろしくお願いします🙇 (1/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a> <a href="https://t.co/i69iZ4MipI">pic.twitter.com/i69iZ4MipI</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820290803197100032">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Swift のビルドが遅いことはたびたび話題になります。すでに Qiita などで書かれているとおり、Xcode で `-Xfrontend -debug-time-function-bodies` フラグを設定するとビルド時間がログに出力されます。 (2/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a> <a href="https://t.co/05OdqjbVSX">pic.twitter.com/05OdqjbVSX</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820290941315489792">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">そしてそれらを見やすくするツールがいくつかあります。たとえば最近では <a href="https://twitter.com/giginet">@giginet</a> さんが Ruby で開発された xcprofiler というツールがあり、僕も少しコントリビュートしました⭐️<a href="https://t.co/ISZ0r42TEt">https://t.co/ISZ0r42TEt</a> (3/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820291077227716608">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">何が遅いのか？特に型推論が遅いと見聞きます。型推論 については Apple の The Swift Programming Language に &quot;Type Inference&quot; の項目があります。<a href="https://t.co/ttfZRdXOIw">https://t.co/ttfZRdXOIw</a> (4/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820291201752387585">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">型を明示すれば時間を短縮できるケースがあるようですが、それでは Swift の強力な型推論が生かせません。そこでコンパイラがどうなっているか見てみました。 (5/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a> <a href="https://t.co/nThcbB2al0">pic.twitter.com/nThcbB2al0</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820291327619305476">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">まず <a href="https://t.co/mUbDOTNv38">https://t.co/mUbDOTNv38</a>（エラー対策で略）を見てみました。<br>&gt; Semantic analysis includes type inference ...<a href="https://t.co/mnd2q7bClR">https://t.co/mnd2q7bClR</a> (6/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a> <a href="https://t.co/GJ73QLNFQd">pic.twitter.com/GJ73QLNFQd</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820292989977182208">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

追記: `エラー対策で略` => `まず Swift.org の Compiler and Standard Library を見てみました。`

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">Semantic analysis にあるようなので GitHub の apple/swift（lib/Sema）をのぞいてみました。これらは C++ で書かれています。<br>swift/lib/Sema/:<a href="https://t.co/FTqeOtqxWK">https://t.co/FTqeOtqxWK</a> (7/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820293118410899456">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">ConstraintSystem.cpp に次のコメントがあります🤔<br>&gt; ConstraintSystem class, which provides type checking and type inference for expressions.<br> (8/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a> <a href="https://t.co/L3oRvRk8d6">pic.twitter.com/L3oRvRk8d6</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820293240955883520">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">…といったところで今回はもう枠におさまりませんが、Type Checker Design and Implementation とコンパイラが公開されているので一度のぞいてみてはいかがでしょうか🤗<a href="https://t.co/GXUkqhRKkl">https://t.co/GXUkqhRKkl</a><br> (9/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820293366797606912">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">最後に、Qiita の記事のほか、まつもとゆきひろさんの著書「言語のしくみ」と mattn さんの書評が非常に参考になりました📖<a href="https://t.co/sVKDFID2P6">https://t.co/sVKDFID2P6</a><br><br>以上、ごTwe...、ありがとうございました🙇 (10/10) <a href="https://twitter.com/hashtag/swtws?src=hash">#swtws</a></p>&mdash; 🥞 jpmartha 🥞 (@jpmartha_jp) <a href="https://twitter.com/jpmartha_jp/status/820293505155100672">January 14, 2017</a></blockquote> <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>