try! Swift 2019
毎年期末試験の時期と重なって参加を断念していたので初参加でした。
参加できるだけでも嬉しかったのですが、光栄なことにスピーカーとして登壇することもできました。
大きなカンファレンスでの登壇は昨年のiOSDCが最初で今回はそれ以来です。ただ、今回は規模がさらに大きいことや、英語での登壇だったこともあり余裕は全くなかったです。
どのくらい余裕がなかったかというと、2日目、登壇する直前の午前中のトークをほぼ覚えていないくらいです。絶対にキャッチアップするので許してください。
登壇
Swift Type Metadata (en) - kateinoigakukunのブログ
Swift Type Metadata (ja) - kateinoigakukunのブログ
Swiftのメタデータについて話しました。内容的には年末に書いたアドカレの発展版です。 Swift Type metadata - Qiita
わいわいswiftcで@omochimetaruが楽しそうに話していたのがきっかけで調べ始めたのですが、ここら辺の技術は掘れば掘るほど面白かったです。
ただ、発表は20分しか無い上に900人にウケる内容にする必要があるので、風呂敷を広げすぎないように構成するのが大変でした。シュッと飛ばした部分が結構あるので、今回の発表で興味を持った方はこの辺を見てもらえると色々と繋がってきて楽しいと思います。
- Swift Type metadata - Qiita
- IRGenから見たType Metadata - Speaker Deck
- Swiftのジェネリクスはどうやって動いているのかコンパイラのソースから探る - Speaker Deck
- ジェネリック型のメタタイプ - Speaker Deck
- SwiftランタイムライブラリとValue Witness Table - Speaker Deck
- コンパイラから紐解くSwift method dispatch - Speaker Deck
- Box式Type Erasureのmethod dispatch - Speaker Deck
後半で紹介した拙作のOSSはメルカリのインターンの中で作ったものです。基本的なアイディアはCodableのデコードの仕組みに乗っかって任意の構造体を組み立てる、という簡単なものです。
最初はenumをサポートしておらず、各自書いてもらう方式をとっていたのですが、今回のスピーカーで僕のメンターでもある@tarunonから、どうにかしてくれ〜と御達しがあったので、なんとか作りました。
初めてコンパイラの勉強が業務の役に立ちました。
英語で話したこともあってか、Ask the speakerの時間に何人か海外の方もいらしてくださり、今回は言及出来なかったstaticなメタプログラミングとの比較や具体的なユースケースの実装相談など、楽しく議論することができました。何より自分の話した内容が伝わっていることが実感できて嬉しかったです。
セッション
個人的に面白かったトークは 「protocol/extensionにジェネリクスを入れたい」です。型パラを静的に分解して詰め直す技がテクニカルでした。カンファレンス中にお話する機会が何度かあったのですが、Swiftに限らない言語の型システムの深い理解から来る興味深い話が聞けました。
ワークショップ
ワークショップはOpen Source Swiftに参加しました。以前自分が報告した SR-7467 に取り組みました。調査を始めた時はTypeCheckerのキャッシュ機構のバグだと思っていたのですが実際の問題は別のところにあり、相当時間を使ってしまいました。最終的にバグの原因は完全にわかったのですが、色々と考慮漏れがあり未だテストが通ってません。
今後
やりたいこと、勉強したいことは増えるばかりで時間がいくらあっても足りません。正しく取捨選択していくぞ