Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Opaque Result Type in Swift with Rust
Search
Takuma Shimizu
March 27, 2019
Programming
0
120
Opaque Result Type in Swift with Rust
Takuma Shimizu
March 27, 2019
Tweet
Share
More Decks by Takuma Shimizu
See All by Takuma Shimizu
Swift Attributes
hokuron
0
330
Peek in Calendar implementation of swift-foundation
hokuron
0
130
MVVM
hokuron
0
33
Summon Rust from Swift
hokuron
0
590
Generalized accessors
hokuron
0
57
Ownership of Swift as seen from iteration and Rust
hokuron
1
600
Clean Architecture 3
hokuron
0
24
Clean Architecture 2
hokuron
0
46
Create MLで犬と猫の肉球を学習
hokuron
0
77
Other Decks in Programming
See All in Programming
sqlcを利用してsqlに型付けを
kamiyam
0
250
メルカリ ハロ アプリの技術スタック
atsumo
2
880
Програмиране с Rust, ФМИ, 2024
nikolads
0
120
CSC509 Lecture 06
javiergs
PRO
0
130
CSC305 Lecture 09
javiergs
PRO
0
110
Jakarta EE as Seen Trough the Lens of the ASF
ivargrimstad
0
760
tsconfig.jsonの最近の新機能 ファイルパス編
uhyo
7
1.9k
Micro Frontends for Java Microservices - dev2next 2024
mraible
PRO
0
230
Serverless renderování Webových komponent
rarous
PRO
0
130
今日で分かる!カスタムコップの作り方
krpk1900
2
150
watsonx.ai Dojo #3 プロンプトエンジニアリング入門
oniak3ibm
PRO
0
340
学生の時に開催したPerl入学式をきっかけにエンジニアが組織に馴染むために勉強会を主催や仲間と参加して職能間の境界を越えていく
ohmori_yusuke
2
330
Featured
See All Featured
Optimizing for Happiness
mojombo
375
69k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
26
4.1k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
4
250
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
For a Future-Friendly Web
brad_frost
174
9.4k
Happy Clients
brianwarren
97
6.7k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
27
1.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
130k
We Have a Design System, Now What?
morganepeng
50
7.2k
Unsuck your backbone
ammeep
668
57k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.6k
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