Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
Opaque Result Type in Swift with Rust
Takuma Shimizu
March 27, 2019
Programming
0
48
Opaque Result Type in Swift with Rust
Takuma Shimizu
March 27, 2019
Tweet
Share
More Decks by Takuma Shimizu
See All by Takuma Shimizu
hokuron
0
180
hokuron
0
170
hokuron
0
300
hokuron
0
9
hokuron
1
370
hokuron
0
13
hokuron
0
18
hokuron
0
36
hokuron
0
20
Other Decks in Programming
See All in Programming
hr01
1
1.3k
nauleyco
0
210
thatjeffsmith
0
450
inoue2002
0
280
trajchevska
2
380
daiki1020
0
1.1k
jun0
3
670
kubode
0
210
makicamel
1
180
osyo
1
370
line_developers_tw
0
550
chichou
1
850
Featured
See All Featured
ufuk
56
5.4k
malarkey
192
8.6k
kneath
294
39k
jakevdp
775
200k
destraynor
223
47k
revolveconf
200
9.6k
kastner
54
1.9k
mongodb
23
3.8k
cassininazir
347
20k
philhawksworth
190
17k
davidbonilla
70
3.5k
sachag
267
17k
Transcript
Opaque Result Type in Swift with Rust
『Swift 5.1 に導入されそうな Opaque Result Type と は何か』 https://qiita.com/koher/items/338d2f2d0c4731e35 08f
リバースジェネリクス 通常のジェネリクス func useAnimal<A: Animal>(_ animal: A) { animal.foo() }
メソッド名に型引数を宣言 引数で型変数を利用 呼び出し側が型引数に対応する具象型を決定
リバースジェネリクス リバースジェネリクス func makeAnimal() -> <A: Animal> A { return
Cat() } メソッドシグネチャの後に型引数を宣言 返却値の型が型変数 実装側が型引数に対応する具象型を決定
Opaque Result Type some Animal を 返却値の型として利用 → リバースジェネリクス メソッド引数として利用
→ 通常のジェネリクスと同義 !!????
ジェネリクス func useAnimal<A: Animal>(_ animal: A) ↓ 型システム的な表現にすると ∀ A.
(func(A: Animal) -> ()) Opaque type func useAnimal(_ animal: some Animal) ↓ 型システム的な表現にすると (∃ A. A: Animal) -> ()
∀ A. (func(A: Animal) -> ()) ターンエーガンダムみたいななんかよく分からん記号 が、メソッドの引数から返却値まで全体にかかってい る。 (∃
A. A: Animal) -> () カタカナの「ヨ」みたいななんかよく分からん記号 は、出現場所( メソッド引数) だけにかかっている。 A. A: Animal の部分は一致している
つまり ∀ A. (func(A: Animal) -> ()) ⇔ (∃ A.
A: Animal) -> () という関係が成り立つ。 メソッド引数として利用した場合、通常のジェネリク スと同義 → 同じではないが、同形をとる
なぜプロトコル型に パフォーマンス上のロスがあるのか
Demo with Rust