型とパフォーマンスで見るType-erasureの利点 | try! Swift Tokyo 2018 Day2-15

2016年のtry! Swiftで紹介されてから誰もが知るところとなったType-erasure、これを採用するメリットを型とパフォーマンスの面から紐解きます。また、stdlibのAnySequenceの実装をヒントに、効率が良くパワフルなType-erasureの実装を探っていきましょう。

型とパフォーマンスで見るType-erasureの利点

f:id:niwatako:20180302171927j:plain

今日のコンテンツは用意しています。Swift4.1、Xcode9.3ベータが必要です。

f:id:niwatako:20180302172059j:plain

これで大事なことは伝えられたので好きなことを話します。

型消去はご存知ですか?

知らない人は勉強して下さい。

どこで必要か知っています。associatedTypeがある時。

f:id:niwatako:20180302172159j:plain

Animalが何者かを知る必要がある。

Prtocolでしょうか

SILで知ることができますね?

f:id:niwatako:20180302172226j:plain

f:id:niwatako:20180302172236j:plain

f:id:niwatako:20180302172245j:plain

存在型が招待と書いてある。

f:id:niwatako:20180302172258j:plain

実際プロダクトコードを描いて困った人がいると思う

f:id:niwatako:20180302172324j:plain

f:id:niwatako:20180302172330j:plain

Genericsにったらダメとか

f:id:niwatako:20180302172359j:plain

f:id:niwatako:20180302172407j:plain

ここで使えるのが型消去

f:id:niwatako:20180302172427j:plain

StandardLibraryのAnySequenceがあるので紹介

f:id:niwatako:20180302172508j:plain

f:id:niwatako:20180302172601j:plain

f:id:niwatako:20180302172604j:plain

f:id:niwatako:20180302172607j:plain

f:id:niwatako:20180302172610j:plain

f:id:niwatako:20180302172613j:plain

f:id:niwatako:20180302172616j:plain

f:id:niwatako:20180302172628j:plain

気になるパフォーマンス

f:id:niwatako:20180302172631j:plain

メソッド呼び出しのオーバーヘッドを消す

f:id:niwatako:20180302172642j:plain

裏技(一般的に使えるようにするプロポーザルがでている)

f:id:niwatako:20180302172700j:plain

まだ。2回テーブル参照されるう

f:id:niwatako:20180302172718j:plain

時間無いので説明飛ばします

f:id:niwatako:20180302172736j:plain

各方消去のいいとこ悪いとこをしましました

つまりタイトル詐欺です、銀の弾丸はないということでした。遊びたい方はリポジトリで遊んでみて下さい。

発表を終わりますありがとうございました。

[広告]面白かったら、ためになったら

  • はてなブックマークSwift タグをつけてブックマーク!
  • 「インターネットで生活を楽しく豊かにしたい」仲間を募集しています
  • Bitcoin: 3KGqXtR1ZaGVdkvcw8CCNrkDxDhdbZBYHL