Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up
for free
哲学とSwiftの発表
Yuka Ezura
September 08, 2017
Programming
5
510
哲学とSwiftの発表
社内勉強会での資料
## ギリシャ哲学とオブジェクト指向の話
* プラトン
* アリストテレス
## Swift
* lazyをletで宣言できるようにする話
* Swift のコンパイラをいじった話
Yuka Ezura
September 08, 2017
Tweet
Share
More Decks by Yuka Ezura
See All by Yuka Ezura
ezura
4
730
ezura
9
670
ezura
11
2.4k
ezura
7
2.1k
ezura
3
1.1k
ezura
4
1.8k
ezura
1
550
ezura
1
770
ezura
2
750
Other Decks in Programming
See All in Programming
yasuakiomokawa
0
460
nori0__
1
480
andpad
0
340
manfredsteyer
PRO
1
210
bkuhlmann
4
290
rockname
1
320
eller86
0
630
matyo91
1
150
samjulien
0
130
kazuhei0108
3
930
thatjeffsmith
0
1.2k
gtongy
0
440
Featured
See All Featured
ufuk
56
5.5k
dougneiner
56
5.4k
mojombo
359
62k
reverentgeek
27
2.1k
edds
56
9.4k
jonyablonski
21
1.3k
denniskardys
220
120k
samlambert
237
10k
dougneiner
119
8k
colly
66
3k
hannesfritz
28
970
hatefulcrawdad
257
17k
Transcript
iOS ࣾษڧձ 2017/9/8 ezura
ۙگ • ֶΛֶͼ࢝Ίͨ
ۙگ • ֶΛֶͼ࢝Ίͨ ΪϦγϟֶ
ۙگ • ֶΛֶͼ࢝Ίͨ ΪϦγϟֶ Θ͔Μͳ͍ʼʻ ผ్Ͱֶֶ΅͏…
զʑ͕ݟ͍ͯΔੈքͷ ਅ࣮Կͳͷ͔
“ਅ”ͱ “ળ”ͱ “ඒ”ͱ
ͦΕΒͷຊ࣭Կͳͷ͔ զʑԿͳͷ͔
ੈքΛߏ͢Δͷ ҰମͳΜͳͷ͔
ੈքΛߏ͢Δͷ ҰମͳΜͳͷ͔
ੈքΛߏ͢Δͷ ҰମͳΜͳͷ͔ ΦϒδΣΫτࢦͷੈքͰͷදݱɺ ΦϒδΣΫτͷଊ͑ํ class, interface, method, …
None
ϓϥτϯ ΞϦετςϨε ιΫϥςε
None
ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ ΠσΞ • ΠσΞքͱײ֮ੈք͕͋Δ
ϓϥτϯͷઆ
ϓϥτϯͷઆ • അͩ
ϓϥτϯͷઆ • അͩ
ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔
ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞৭ͳͲɺશʹಉ͡Ͱͳ ͍ͷʹɺͳͥഅͩͱஅͰ͖Δͷ͔
ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞৭ͳͲɺશʹಉ͡Ͱͳ ͍ͷʹɺͳͥഅͩͱஅͰ͖Δͷ͔ • അͨΒ͠ΊΔͷԿ͔
ϓϥτϯͷઆ • അͩ • ͳͥഅͩͱࢥ͏ͷ͔ • େ͖͞৭ͳͲɺશʹಉ͡Ͱͳ ͍ͷʹɺͳͥഅͩͱஅͰ͖Δͷ͔ • അͨΒ͠ΊΔͷԿ͔
• ͳͥഅෳଘࡏͰ͖Δͷ͔
ΠσΞք ײ֮ੈք
ΠσΞք ײ֮ੈք
ΠσΞք ײ֮ੈք class അ { property method }ɹ instance instance
instance
ΠσΞք ײ֮ੈք class അ { property method }ɹ instance instance
instance ීวͰӬԕͳͷ มԽ͠ ੜɾফ໓͢Δͷ
ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ ΠσΞ = ܕ • ΠσΞքͱײ֮ੈք͕͋Δ ܕͷੈքͱΠϯελϯεͷੈք
ϓϥτϯͷઆ • ӬԕͰීวͳΔଘࡏɺਅͷଘࡏ ΠσΞ = ܕ • ΠσΞքͱײ֮ੈք͕͋Δ ܕͷੈքͱΠϯελϯεͷੈք ΠσΞք
Ͳ͔͜ผͷੈք
ϓϥτϯ ΞϦετςϨε ιΫϥςε
ΞϦετςϨεͷઆ • ͷ”ܗ૬ͱ࣭ྉ(eidosͱhyle)”Ͱ Ͱ͖͍ͯΔ • 4ݪҼ
ΞϦετςϨεͷઆ • അͩ
ΞϦετςϨεͷઆ • അͩ
ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔
ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔ • അͱ • Δ •
ஆ͔͍ • …
ΞϦετςϨεͷઆ • അͩ • ͳͥഅͳͷ͔ • അͱ • Δ •
ஆ͔͍ • … ੑ࣭ͷू·Γ
ੑ࣭ ੑ࣭ ੑ࣭ ੑ࣭ ࣭తͳͷ (ͷΛ۩Խͤ͞Δͷ) ʴ → ܗ૬ ܗ࣭
class അ { property method }ɹ ܗ૬ ࣭ྉ
ϓϥτϯ ΞϦετςϨε ੑ࣭ ੑ࣭ ੑ࣭
ϓϥτϯ ΞϦετςϨε ੑ࣭ ੑ࣭ ੑ࣭ 4ݪҼ͔Β ࣮ମΛ؍
ۙگใࠂऴΘΓ
ۙگใࠂऴΘΓ
ࣗ༝ݚڀ • lazy ͳϓϩύςΟΛ let Ͱѻ͏ • Optional Λจࣈྻมͨ͠ͱ͖ʹ “Optional(“text”)”
ʹͳ ΔͷΛ͚ͬͭΔ protocol
lazy ͳϓϩύςΟΛ let Ͱѻ͏
ಈػ swiftlazyΛval/letʹͰ͖ͳ͍͔ΒΫι ‧⛺è䡢(’ω’)䡢è⛺䡡‧ ͱ͋Δͷਓ
swift kotlin
swift kotlin ↓
swift kotlin kotlin ͷ lazy function ↓
swift kotlin ↓ kotlin ͷ lazy function Lazy ܕ
kotlin ͷ Lazy property Lazy value ॳظԽͷΫϩʔδϟ get delegation
Swift Ͱͷ࣮ public class Lazy<T> { private let initializer: ()
-> T private var _value: T! public var value: T { // TODO: mutex switch _value { case .none: _value = initializer() return _value case .some(let v): return v } } public init(initializer: @escaping () -> T) { self.initializer = initializer } } public func lazy<T>(initializer: @escaping () -> T) -> Lazy<T> { return Lazy(initializer: initializer) }
swift kotlin ↓
swift kotlin ↓
swift kotlin ↓ (‘ω’ )
swift kotlin ↓ (‘ω’ ) Swift3 ·Ͱ `v[]`Ͱ͖ͨΜͩ… ͜Μͳͣ͡Όͳ͔ͬͨΜͩ…
swift kotlin ↓ let ʹͰ͖͔ͨΒ
Optional Λจࣈྻมͨ͠ͱ͖ʹ “Optional(“text”)” ʹͳΔͷΛ͚ͬͭΔ protocol
Optional Λจࣈྻมͨ͠ͱ͖ʹ “Optional(“text”)” ʹͳΔͷΛ͚ͬͭΔ protocol :ݸਓతʹ “Optional(“text”)”ͬͯͳΔͷɺ Optionalͷૢ࡞ϛεʹର͢ΔռΊΈ͍ͨͰ͖Ͱ͢
extension Optional: CustomStringConvertible { public var description: String { switch
self { case .none: return "" case .some(let wrapped): return "\(wrapped)" } } } "\("sss" as Optional)" ͖ͬ͞ؾ͍͚ͮͨͲɺ ͜ΕͰࡁΜͩ ͔͔ͤͬͬͨ͘Βɺ ଞͷΓํ͠·͢ʂ
"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" //
-> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal
"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" //
-> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦
"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" //
-> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦ Λ͑ͳ͍͚ͯ͘ͳ͍
"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" //
-> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } } Goal զʑͷׯবͰ͖Δ෦ Λ͑ͳ͍͚ͯ͘ͳ͍
खॱ • Swift ͷϓϩδΣΫτΛ࣋ͬͯདྷΔ • cmake ͱ ninja Λ࣋ͬͯདྷΔ •
࠷৽ͷ Xcode Λࢦఆ͢Δ • มจࣈྻΛܾఆ͢Δͱ͜ΖΛม͑Δ (https://github.com/ezura/swift/commit/ 6e782f69265224a3b5321f9315039d36428dfcc7) • ίϯύΠϧ
"\(Normal() as Optional)" // -> "Optional(description)" "\(Force() as Optional)" //
-> "description" // ------------------ struct Normal: CustomStringConvertible { var description: String { return "\(#function)" } } struct Force: CustomForceStringConvertible { var description: String { return "\(#function)" } }
͍ͭͰʹ Lazy ΈࠐΈ·ͨ͠ https://github.com/ezura/swift/commit/ 7946a66674f696836321df8d9b189ae0a804eb4c
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠