Slide 1

Slide 1 text

Αͤ͋ͭΊ4XJGU 4XJGU ೳొཁ !OPUPSPJE J1IPOFΞϓϦ։ൃऀ೥݄೔

Slide 2

Slide 2 text

࿩͢಺༰ w 4XJGUͷ৽ػೳ w 4XJGU.BDSP͸৽ػೳ w 0CTFSWBUJPOGSBNFXPSL

Slide 3

Slide 3 text

࿩͞ͳ͍಺༰ w ฒߦੑ $PODVSSFODZ ͷػೳڧԽ w 5BTL(SPVQͷछྨ௥Ճ ݁ՌΛอ࣋͠ͳ͍άϧʔϓԽ͞ΕͨλεΫ w λεΫͷ༏ઌ౓্֨͛ػೳ w λεΫ಺ͷ؀ڥม਺ڞ༗ػೳ w ฒߦੑ࣌ͷಈ࡞τϨʔε

Slide 4

Slide 4 text

͓୊໨ w վળ͢͢Ή4XJGUݴޠ w ৽ػೳᶃʙᶅ w ৽ػೳ 4XJGUNBDSPT w 0CTFSWBUJPOͷαϯϓϧ w ·ͱΊ

Slide 5

Slide 5 text

վળ͢͢Ή4XJGUݴޠ

Slide 6

Slide 6 text

88%$ऴΘΓ·ͨ͠Ͷ

Slide 7

Slide 7 text

ڈ೥͸4XJGUͷ଍ Ի͕ฉ͍͑ͯͨ͜͸ ͕ͣͩʜ IUUQTEFWFMPQFSBQQMFDPN XXED

Slide 8

Slide 8 text

4XJGUݴޠ͸ΑΓ͔͸ ৽ػೳ௥Ճ͸௿ௐ

Slide 9

Slide 9 text

8IBU`TOFXJO4XJGU88%$ IUUQTEFWFMPQFSBQQMFDPNXXED

Slide 10

Slide 10 text

8IBU`TOFXJO4XJGU88%$ IUUQTEFWFMPQFSBQQMFDPNXXED ϓϩδΣΫτશମͷऔΓ૊Έ ৽ػೳᶃJGFMTF TXJUDIΛࣜͱͯ͠࢖༻Մೳʹ ৽ػೳᶄܕύϥϝʔλʔͷύοέʔδରԠ 4XJGUͷੑೳ໘޲্ͷ࿩ ৽ػೳ 4XJGU"UUSJCVUFT͕ఏڙ͍ͯͨ͠ػೳΛϓ ϥάΠϯͱͯ͠ར༻Մೳʹ ੑೳ໘޲্ͨ͠4XJGUΛ࢖ͬͯϑϨʔϜϫʔΫΛ࡮৽த ৽ػೳᶅDMBTTͰͰ͖Δ͜ͱΛTUSVDUʹ೚͍ͤͨ ৽ػೳᶇฒߦੑͷॊೈੑΛڧԽ ˢͷ࠾༻ྫ ৽ػೳᶆ$޲͚ͷίʔυδΣωϨʔλʔ

Slide 11

Slide 11 text

8IBU`TOFXJO4XJGU88%$ IUUQTEFWFMPQFSBQQMFDPNXXED ৽ػೳᶃJGFMTF TXJUDIΛࣜͱͯ͠࢖༻Մೳʹ ৽ػೳᶄܕύϥϝʔλʔͷύοέʔδରԠ ৽ػೳ 4XJGU"UUSJCVUFT͕ఏڙ͍ͯͨ͠ػೳΛϓ ϥάΠϯͱͯ͠ར༻Մೳʹ ৽ػೳᶅDMBTTͰͰ͖Δ͜ͱΛTUSVDUʹ೚͍ͤͨ ৽ػೳᶇฒߦੑͷॊೈੑΛڧԽ ৽ػೳᶆ$޲͚ͷίʔυδΣωϨʔλʔ

Slide 12

Slide 12 text

8IBU`TOFXJO4XJGU88%$ IUUQTEFWFMPQFSBQQMFDPNXXED ৽ػೳᶃJGFMTF TXJUDIΛࣜͱͯ͠࢖༻Մೳʹ ৽ػೳᶄܕύϥϝʔλʔͷύοέʔδରԠ ৽ػೳ 4XJGU"UUSJCVUFT͕ఏڙ͍ͯͨ͠ػೳΛϓ ϥάΠϯͱͯ͠ར༻Մೳʹ ৽ػೳᶅDMBTTͰͰ͖Δ͜ͱΛTUSVDUʹ೚͍ͤͨ ৽ػೳᶇฒߦੑͷॊೈੑΛڧԽ ৽ػೳᶆ$޲͚ͷίʔυδΣωϨʔλʔ

Slide 13

Slide 13 text

8IBU`TOFXJO4XJGU88%$ IUUQTEFWFMPQFSBQQMFDPNXXED ৽ػೳᶃJGFMTF TXJUDIΛࣜͱͯ͠࢖༻Մೳʹ ৽ػೳᶄܕύϥϝʔλʔͷύοέʔδରԠ ৽ػೳ 4XJGU"UUSJCVUFT͕ఏڙ͍ͯͨ͠ػೳΛϓ ϥάΠϯͱͯ͠ར༻Մೳʹ ৽ػೳᶅDMBTTͰͰ͖Δ͜ͱΛTUSVDUʹ೚͍ͤͨ ৽ػೳᶇฒߦੑͷॊೈੑΛڧԽ ৽ػೳᶆ$޲͚ͷίʔυδΣωϨʔλʔ ৽ػೳʙЋΛͬ͘͟Γઆ໌͍ͨ͠ɻ

Slide 14

Slide 14 text

৽ػೳᶃ JGFMTF TXJUDIΛࣜͱͯ͠࢖༻Մೳʹ

Slide 15

Slide 15 text

6TJOHJGFMTFBOETXJUDITUBUFNFOUTBTFYQSFTTJPOT JGFMTFTXJUDIεςʔτϝϯτΛࣜͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δ enum Status: CaseIterable { case sleep case active case playingGame var description: String { switch self { case .active: return "ΞΫςΟϒ" case .sleep: return "ਭ຾" case .playingGame: return "ήʔϜத" } } } ྫFOVN4UBUVTʹઆ໌Λ෇Ճ͢ΔEFTDSJQUJPOଐੑΛ௥Ճ͢Δɻ

Slide 16

Slide 16 text

6TJOHJGFMTFBOETXJUDITUBUFNFOUTBTFYQSFTTJPOT JGFMTFTXJUDIεςʔτϝϯτΛࣜͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δ enum Status: CaseIterable { case sleep case active case playingGame var description: String { return switch self { case .active: return "ΞΫςΟϒ" case .sleep: return "ਭ຾" case .playingGame: return "ήʔϜத" } } } ྫFOVN4UBUVTʹઆ໌Λ෇Ճ͢ΔEFTDSJQUJPOଐੑΛ௥Ճ͢Δɻ

Slide 17

Slide 17 text

6TJOHJGFMTFBOETXJUDITUBUFNFOUTBTFYQSFTTJPOT JGFMTFTXJUDIεςʔτϝϯτΛࣜͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δ enum Status: CaseIterable { case sleep case active case playingGame var description: String { switch self { case .active: "ΞΫςΟϒ" case .sleep: "ਭ຾" case .playingGame:"ήʔϜத" } } } ྫFOVN4UBUVTʹઆ໌Λ෇Ճ͢ΔEFTDSJQUJPOଐੑΛ௥Ճ͢Δɻ 4XJUDIจ͕จࣈྻΛฦࣜ͢ͱͯ͠ػೳ ͢Δؔ਺಺ʹ͔͕ͭࣜ͠ͳ͍ͷͰ SFUVSO΋লུͰ͖Δɻ

Slide 18

Slide 18 text

৽ػೳᶄ ܕύϥϝʔλʔͷύοέʔδରԠ

Slide 19

Slide 19 text

UZQFQBSBNFUFSQBDLT ܕύϥϝʔλʔͷύοέʔδରԠ wͦ΋ͦ΋4XJGUͷHFOFSJD͸ΞΠσΞͱ࣮ࡍͷܕΛ෼཭͢Δख๏ wෳ਺ͷܕΛҾ਺ͱͯ͠ΞΠσΞड͚औΔʹ͸Ҿ਺෼ͷఆ͕ٛඞཁͩͬͨ wෳ਺ͷܕΛ࣋ͭҾ਺ΛύοέʔδԽ͢Δ৽͍͠ఆ͕ٛొ৔ wFBDIͱSFQFBUΛ࢖༻ͯ͠ܕύϥϝʔλఆٛΛ࣮ࡍͷ஋औΓग़͠Λ࣮ݱ FBDI3FTVMU

Slide 20

Slide 20 text

ܕύϥϝʔλʔͷύοέʔδରԠᶃ func query( _ item: Request ) -> Payload func query( _ item1: Request, _ item2: Request ) -> (Payload1, Payload2) func query( _ item1: Request, _ item2: Request, _ item3: Request ) -> (Payload1, Payload2, Payload3) func query( _ item1: Request, _ item2: Request, _ item3: Request, _ item4: Request ) -> (Payload1, Payload2, Payload3, Payload4)

Slide 21

Slide 21 text

func query( _ item: Request ) -> Payload func query( _ item1: Request, _ item2: Request ) -> (Payload1, Payload2) func query( _ item1: Request, _ item2: Request, _ item3: Request ) -> (Payload1, Payload2, Payload3) func query( _ item1: Request, _ item2: Request, _ item3: Request, _ item4: Request ) -> (Payload1, Payload2, Payload3, Payload4) func query(_ item: repeat Request) -> (repeat each Payload) ύϥϝʔλ਺Λ૿΍ͨ͠ಉؔ͡਺ఆ͕ٛඞཁͩͬͨ ΋ͷ͕ͭͷύϥϝʔλʔͱͯ͠ѻ͏͜ͱ͕Մೳʹ ܕύϥϝʔλʔͷύοέʔδରԠᶄ

Slide 22

Slide 22 text

w UZQFQBSBNFUFSQBDLT͸ύϥϝʔλʔͷܕΛอͬͨ··ͳͷͰؔ਺ͷ໭Γ஋ ΁ɺܕͦͷ΋ͷɺܕʹؔ࿈͢ΔܕΛฦ͢͜ͱ͕Ͱ͖Δɻ ܕύϥϝʔλʔͷύοέʔδରԠᶅ w౉ͨ͠ύϥϝʔλʔΛ౉ͨ͠ύϥϝʔλʔ਺෼ͷλϓϧΛ ฦ͢͜ͱ͕Մೳɻ w໭Γ஋ʹύϥϝʔλͰ౉͞ΕͨܕΛ࢖Θͳ͍ͷͰ͋Ε͹ಛ ʹܕύϥϝʔλʔΛ࢖͏ඞཁ͕ͳ͍ɻ

Slide 23

Slide 23 text

ܕύϥϝʔλʔͷύοέʔδରԠᶆ protocol Animal { associatedtype Food: AnimalFeed associatedtype Commodity: AnimalCommodity func eat(_ food: Food) func produce() -> Commodity } struct Chicken: Animal { typealias Food = Grain typealias Commodity = ChickenMeat func eat(_ food: Grain) { // do something eat... } func produce() -> ChickenMeat { return ChickenMeat() } } ܕͱ͍ͬͯ΋HFOFSJDTɺQSPUPDPMͱBTTPDJBUFEUZQFΛ ૊Έ߹ΘͤΔͱม׵Ͱ͖ΔܕͷόϦΤʔγϣϯ͸૿͑Δ

Slide 24

Slide 24 text

w UZQFQBSBNFUFSQBDLT͸ύϥϝʔλʔͷܕΛอͬͨ··ͳͷͰؔ਺ͷ໭Γ஋ ͳͲʹύϥϝʔλʔͷܕΛ൓өͨ͠ܕΛ໭Γ஋ʹ൓өͰ͖Δ w ܕύϥϝʔλʔͷύοέʔδରԠ͸4XJGU6*ʹ࢖ΘΕͦ͏ͳงғؾΛ͍ͩͯ͠ Δ͕ͦΜͳ͜ͱ͸ͳ͔ͬͨ ܕύϥϝʔλʔͷύοέʔδରԠᶇ

Slide 25

Slide 25 text

৽ػೳᶅ 0XOFSTIJQ

Slide 26

Slide 26 text

0XOFSTIJQ ߏ଄ମͰ΋Ϋϥεͷ୅ΘΓΛ͍ͨ͠ɻ DMBTTͷར఺͸ΦϒδΣΫτͷղ์λΠϛϯάͰEFJOJU ͕ݺͼग़͞Ε ΔɻEFJOJU ͷಛੑΛར༻ͯ͠ΦϒδΣΫτϋϯυϧ IBOEMF Λղ์͢ Δ࢓૊ΈΛ࡞͍ͬͯΔɻ TUSVDUͰ΋޻෉ ࡉ޻ ͢Ε͹DMBTTΛ࢖Θͳͯ͘΋ ࣮ݱͰ͖Δ͔΋ʜ

Slide 27

Slide 27 text

0XOFSTIJQ ߏ଄ମͰ΋Ϋϥεͷ୅ΘΓΛ͍ͨ͠ɻ struct FileDescriptor: ~Copyable { private var fd: CInt init(descriptor: CInt) { self.fd = descriptor } func write(buffer: [UInt8]) throws { let written = buffer.withUnsafeBufferPointer { Darwin.write(fd, $0.baseAddress, $0.count) } // ... } consuming func close() { Darwin.close(fd) } deinit { Darwin.close(fd) } }

Slide 28

Slide 28 text

0XOFSTIJQ ߏ଄ମͰ΋Ϋϥεͷ୅ΘΓΛ͍ͨ͠ɻ struct FileDescriptor: ~Copyable { private var fd: CInt init(descriptor: CInt) { self.fd = descriptor } func write(buffer: [UInt8]) throws { let written = buffer.withUnsafeBufferPointer { Darwin.write(fd, $0.baseAddress, $0.count) } // ... } consuming func close() { Darwin.close(fd) } deinit { Darwin.close(fd) } } ίϐʔͰ͖ΔΛ൱ఆ͢Δϓϩτίϧ໊͕ڧҾ DPOTVNJOHΛ͚ͭΔͱଞͷؔ਺ΑΓ΋࠷ޙʹݺͼग़ ͞ΕΔ͔ΛίϯύΠϧϕʔεͰνΣοΫ

Slide 29

Slide 29 text

৽ػೳ 4XJGUNBDSPT

Slide 30

Slide 30 text

4XJGUNBDSPTᶃ 4XJGU"UUSJCVUFTͰ"QQMF͕΍͖ͬͯͨ͜ͱΛ9DPEFͷϓϥάΠϯԽ w 1BDLBHFͰఏڙ͞ΕΔϓϥάΠϯ MPDBM͔ΒऔΓࠐΈɺDPMMFDUJPO͔Βऔಘ w Ͱ࢝·Δ'SFFTUBOEJOHNBDSPT w !Ͱ࢝·ΔBUUBDIFENBDSPT w !Ͱ࢝·ΔͷͰ4XJGU"UUSJCVUFTΛ4XJGUNBDSPTͱݟ෼͚͕͔ͭͳ͍ w NBDSPΛॻ͘ͱ4XJGUݴޠͷղੳ໦Λ౉͞ΕΔͷͰɺผͷιʔείʔυ จࣈ ྻ ΁ͱม׵͢Δ࢓༷

Slide 31

Slide 31 text

4XJGUNBDSPTᶄ 4XJGUNBDSPT޲͚ͷ4XJGU"UUSJCVUFT w એݴଐੑ %FDMBSBUJPO"UUSJCVUFT ͷҰ෦ w BUUBDIFE w 1FFSNBDSPTɺ.FNCFSNBDSPɺ.FNCFSBUUSJCVUFɺ"DDFTTPS NBDSPTɺ$POGPSNBODFNBDSPTɺ w GSFFTUBOEJOH !Ͱ࢝·Δ4XJGU.BDSPΛ࡞Ζ͏ͱ͢Δͱ!Ͱ࢝· Δ4XJGU"UUSJCVUFTΛ࢖͏͜ͱʹͳΔ

Slide 32

Slide 32 text

4XJGUNBDSPTᶅ 4XJGUNBDSPTͷ༻్ w ϑϨʔϜϫʔΫಠࣗͷػೳΛ૊ΈࠐΉࡍͷఆܕจ ϘΠϥϓϨʔτίʔυ هड़Λ 4XJGUNBDSPTͰஔ͖׵͑Δ͜ͱ͕Մೳ w "QQMFۘ੡ͷϑϨʔϜϫʔΫ΋࠾༻ w 4XJGU%BUB w 0CTFSWBUJPOGSBNFXPSL w ιϑτ΢ΣΞΞʔΩςΫνϟ΁ద߹ͤ͞ΔͨΊͷϚΫϩ w ରԠͦ͠͏ͳΞʔΩςΫνϟ 7*1&3ɺ3FEVYͱ͔

Slide 33

Slide 33 text

4XJGUNBDSPTᶆ 4XJGUNBDSPTΛࢼ͢ w 9DPEF/FX1BDLBHF͔Β4XJGUNBDSPTΛબ୒Մೳ w σϑΥϧτͰTUSJOHJGZͷαϯϓϧؚ͕·ΕΔ w 9DPEFCFUBͰ͸MPDBM͔ΒऔΓࠐΈͰ͖ͳ͔ͬͨ

Slide 34

Slide 34 text

͔͜͜Β͸4XJGUNBDSPTʹ ࢥ͏ͱ͜Ζʜ

Slide 35

Slide 35 text

4XJGU४ඪ४ػೳΛ૊ΈࠐΉͨΊʹ4XJGU"UUSJCVUFTʹ৽ఆٛΛ௥Ճ͢Δ ͷ΋ݶ౓͕͋Δɻ ˡϑϨʔϜϫʔΫʹґଘ͢Δఆ͕ٛཉ͍͔͠ΒϚΫϩػೳΛఏڙ͠Α͏ɻ Έ͍ͨͳϊϦͳͷͰ͸ 4XJGUNBDSPTొ৔ͷഎܠΛߟ͑Δ IUUQTTQFBLFSEFDLDPNOPUPSPJEBQQMFHBZBSJUBJGBOHUJTXJGUBUUSJCVUFT ࢀߟ "QQMF͕ ΍Γ͍ͨ์୊4XJGU"UUSJCVUFT4QFBLFS%FDL

Slide 36

Slide 36 text

4XJGUNBDSPT͸ڧྗ͚ͩͲɺϑϨʔϜϫʔΫΛఏڙ ͢Δͱ͔ɺϚΫϩ༻1BDLBHFΛҡ࣋Ͱ͖Δ ମྗ͕͋ Δ ૊৫ ίϛϡχςΟɺاۀ ʹݶఆ͞ΕΔͷͰ͸ ϞόΠϧϓϥοτϑΥʔϜʹ͍ͭͯ͸͔ͭͯ΄Ͳͷ ։ൃऀ͕૿͑ΔΘ͚Ͱ͸ͳ͍ͷʹʜ 4XJGUNBDSPT΁ͷٙ໰

Slide 37

Slide 37 text

4XJGUNBDSPͷαϯϓϧ

Slide 38

Slide 38 text

0CTFSWBUJPOͷαϯϓϧίʔυ 4XJGUNBDSPΛ࢖༻ IUUQTHJUIVCDPNOPUPSPJE(BNF1MBZFS4UBUVT

Slide 39

Slide 39 text

0CTFSWBUJPOͷαϯϓϧ wIUUQTHJUIVCDPNOPUPSPJE (BNF1MBZFS4UBUVT wήʔϜϓϨΠϠʔͷঢ়ଶΛදࣔ มߋͰ͖Δ w1FSTPOΛ͜Ε·Ͱͷ࣮૷ɺ 0CTFSWBUJPOΛ࢖ͬͨ΋ͷΛࢼ͢ ͜ͱ͕Ͱ͖Δ w9DPEFͷΤσΟλͰϚΫϩల։͕ Մೳ (BNF1MBZFS4UBUVT

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

0CTFSWBUJPOGSBNFXPSLͷϚΫϩͦͷ 0CTFSWBUJPOGSBNFXPSLͷϚΫϩͦͷ 0CTFSWBUJPOGSBNFXPSLͷଐੑ؂ࢹΦϒδΣΫτ

Slide 42

Slide 42 text

͜Ε·Ͱͷ4XJGU6*ͷ൥ࡶ͞͸ͳΜͩͬͨͷ͔ 0CTFSWBCMF0CKFDUɺ!0CTFSWFE0CKFDUɺ !4UBUF0CKFDUɺ!&OWJSPONFOU0CKFDU 0CTFSWBUJPOGSBNFXPSL

Slide 43

Slide 43 text

·ͱΊ w4XJGU͸ੑೳ޲্ɺ$ͷޓ׵ੑ͕Ξϐʔϧ͞ΕΔ΋࠷৽ػೳ͸ গͳΊͰ͢ w4XJGU"UUSJCVUFTͷػೳΛϓϥάΠϯԽͨ͠Α͏ͳ4XJGUNBDSPT͕ొ ৔͠·ͨ͠ɻ w"QQMF͸4XJGUNBDSPTΛఏڙ࡞ΔͨΊʹ4XJGU"UUSJCVUFT΁৽͘͠ఆ ٛΛ௥Ճ͠·ͨ͠

Slide 44

Slide 44 text

ࢀߟ w 8IBU`TOFXJO4XJGU88%$7JEFPT "QQMF%FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNXXED w &YQBOEPO4XJGUNBDSPT88%$7JEFPT "QQMF%FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNXXED w 8SJUF4XJGUNBDSPT88%$7JEFPT"QQMF %FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNXXED w .FFU4XJGU%BUB88%$7JEFPT"QQMF %FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNXXED w 8IBUTOFXJO4XJGUͷཁ໿ TXJGU@@@TVNNBSZ4QFBLFS%FDL w IUUQTTQFBLFSEFDLDPNVIPPJTXJGU TVNNBSZ w 4XJGUͰಋೖ͞ΕΔ"UUBDIFE.BDSPʹ͍ͭͯ 2JJUB w IUUQTRJJUBDPNGSPTUFE@CJSEJUFNT GCGD w 0CTFSWBUJPOc"QQMF%FWFMPQFS%PDVNFOUBUJPO w IUUQTEFWFMPQFSBQQMFDPN EPDVNFOUBUJPOPCTFSWBUJPO