Slide 1

Slide 1 text

ू·ΕSwift޷͖ʂSwiftѪ޷ձ vol.80 @ DeNA 2024/03/07 @DeNA Catch Up with Swift 5.10 ojun - DeNA Co., Ltd.

Slide 2

Slide 2 text

ࣗݾ঺հʢojunʣ • name: ojun • 2023೥৽ଔೖࣾ • iOSΤϯδχΞ @ojun_9

Slide 3

Slide 3 text

Catch Up with Swift 5.10

Slide 4

Slide 4 text

Ҿ༻IUUQTXXXTXJGUPSHCMPHTXJGUSFMFBTFE Swift 5.10 ͕ϦϦʔε͞Ε·ͨ͠ 🎉

Slide 5

Slide 5 text

Ҿ༻IUUQTXXXTXJGUPSHCMPHTXJGUSFMFBTFE Swift 5.10 ͕ϦϦʔε͞Ε·ͨ͠ 🎉

Slide 6

Slide 6 text

ࠓ೔࿩͢͜ͱ

Slide 7

Slide 7 text

Catch Up with Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables

Slide 8

Slide 8 text

SE-0404: Allow Protocols to be Nested in Non-Generic Contexts

Slide 9

Slide 9 text

SE-0404: Allow Protocols to be Nested in Non-Generic Contexts Swift 5.10·Ͱ͸ɺඇδΣωϦοΫͳߏ଄ମɾΫϥεɾྻڍܕɾΞΫλʔ಺ʹ ଞͷಉྨͷܕΛωετ͢Δ͜ͱ͸Մೳͩͬͨ ҰํͰɺprotocol Λωετ͢Δ͜ͱ͸ෆՄೳͩͬͨ ͜ͷϓϩϙʔβϧʹΑΓɺωετ͞Εͨ protocol Λදݱ͢Δ͜ͱ͕Մೳͱͳͬͨ

Slide 10

Slide 10 text

Ϟνϕʔγϣϯ ଞͷܕͷதʹܕΛωετͰ͖Δͱ͍͏ݱࡏͷػೳʹΑΓɺʢ៉ྷͰࣗવͳʣܕͷ είʔϓΛදݱ͢Δ͜ͱ͕Մೳʹͳ͍ͬͯΔ ྫ͑͹ɺString.UTF8View ͸ String ͷதʹωετ͞Εͨ UTF8View ͱ͍͏ߏ଄ମͰ͋Δ ͜ͷ໊લ͔ΒɺUTF8View ͕ String ͷ UTF-8෦෼ʹΞΫηε͢Δ ΠϯλʔϑΣʔεͰ͋Δ͜ͱ͕໌֬ʹͳ͍ͬͯΔ ಉ༷ͷ͜ͱΛ protocol Ͱ΋ߦ͑ΔΑ͏ʹ͍ͨ͠

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

protocolΛఆٛ

Slide 15

Slide 15 text

protocolΛఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ

Slide 16

Slide 16 text

protocolΛఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ

Slide 17

Slide 17 text

protocolΛఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ protocolʹ४ڌ͢ΔܕͷΠϯελϯεΛ ड͚औΓɺͦͷ execute ϝιουΛ ݺͼग़͢

Slide 18

Slide 18 text

protocolΛఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ protocolʹ४ڌͤͨ͞ struct Λఆٛ ϝιουͷৄࡉ protocolʹ४ڌ͢ΔܕͷΠϯελϯεΛ ड͚औΓɺͦͷ execute ϝιουΛ ݺͼग़͢

Slide 19

Slide 19 text

ར༻ࣗମ͸ݶఆత ؔ਺಺͕ෳࡶʹͳΔ͜ͱΛݴޠ੍͕ݶ͢Δ ཧ༝΋ͳ͍ ↓ ࠨͷΑ͏ͳॻ͖ํ͕։์͞Ε͍ͯΔ

Slide 20

Slide 20 text

Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables 􀇻

Slide 21

Slide 21 text

SE-0411: Isolated Default Value Expressions

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ

Slide 24

Slide 24 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ message ͸ SomeGlobalActor ʹִ཭͞Ε͍ͯΔ

Slide 25

Slide 25 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ message ͸ SomeGlobalActor ʹִ཭͞Ε͍ͯΔ ॳظԽ͕ҟͳΔΞΫλʔʹΑͬͯߦΘΕΔͨΊ σʔλڝ߹ͷՄೳੑ͕͋Δ ͜Ε͸ɺҟͳΔΞΫλʔ͕ಉ࣌ʹҟͳΔεϨουͰ ࣮ߦ͞ΕΔͨΊɺ༧ظ͠ͳ͍λΠϛϯάͰ͜ΕΒͷ ϓϩύςΟ͕ॳظԽ͞ΕΔՄೳੑ͕͋ΔͨΊ

Slide 26

Slide 26 text

Stored PropertyͷσϑΥϧτ஋͸ɺͦͷϓϩύςΟ͕ ଐ͢Δ Actor ͱಉ͡෼཭Λ࣋ͭ΂͖ Swift 5.10͔Β͸nonisolated init͔ΒΞΫλʔ෼཭͞Εͨ ϓϩύςΟͷॳظԽΛߦ͏͜ͱ͸Ͱ͖ͳ͘ͳΓ σʔλڝ߹͕ഉআ͞ΕΔ

Slide 27

Slide 27 text

initΛasyncʹ͠ɺ͔ͭɺ಺෦Ͱ await ΩʔϫʔυΛ෇༩ͤ͞Δ ͜ͱͰॳظԽΛߦ͏͜ͱ͕ՄೳʹͳΔ

Slide 28

Slide 28 text

Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables 􀇻 􀇻

Slide 29

Slide 29 text

SE-0412: Strict Concurrency for Global Variables

Slide 30

Slide 30 text

SE-0412: Strict Concurrency for Global Variables άϩʔόϧͳঢ়ଶɾม਺͸ɺϓϩάϥϜͷͲͷίϯςΩετ͔ΒͰ΋ΞΫηεͰ͖Δ ͷͰɺฒߦੑͷจ຺΍σʔλִ཭ͷνΣοΫʹ͓͍ͯ՝୊͕͋Δ ϩʔΧϧʹଘࡏ͢ΔΩϟϓνϟ͞Ε͍ͯͳ͍ม਺͸ϩʔΧϧͷίϯςΩετ͔ΒͷΈ ΞΫηεՄೳͰɺ͜ΕʹΑΓ҉໧తʹִ཭͞Ε͍ͯΔ ஋ܕɾࢀরܕͷϓϩύςΟ͸ִ཭͢Δ͜ͱ͕Մೳ ҰํͰɺάϩʔόϧม਺͸Ͳ͔͜ΒͰ΋ΞΫηεՄೳͳͷͰɺϩʔΧϧɾ஋ܕɾࢀরܕͱ ҟͳΓִ཭͢Δ͜ͱ͕೉͍͠

Slide 31

Slide 31 text

SE-0412: Strict Concurrency for Global Variables Swift 5.10ʢͷݫ֨ͳฒߦੑνΣοΫͷԼͰ͸ʣ͢΂ͯͷάϩʔόϧม਺Λ άϩʔόϧΞΫλʔʹִ཭͢Δ͔ɺҎԼͷ྆ํͰ͋Δ͜ͱ͕ཁٻ͞ΕΔ 1. ෆมͰ͋Δ͜ͱ 2. SendableͰ͋Δ͜ͱ τοϓϨϕϧͷάϩʔόϧม਺͸طʹ MainActor ʹ҉໧తʹִ཭͞Ε͍ͯΔ Ώ͑ʹ্هͷཁ݅Λࣗಈతʹຬͨ͢

Slide 32

Slide 32 text

SE-0412: Strict Concurrency for Global Variables Ұ෦ͷঢ়گͰ͸ɺಠࣗͷσʔλִ཭؅ཧʹґଘͰ͖ΔΑ͏ʹ੩తνΣοΫΛ ΦϓτΞ΢τ͢Δඞཁ͕͋Δ৔߹͕͋Δ ྫ: σʔλΞΫηεͷ௚ྻԽΛอূ͢Δಠࣗͷσʔλִ཭؅ཧʹཔΔඞཁ͕͋Δ৔߹ nonisolated(unsafe) Λɺάϩʔόϧม਺ʹ࢖༻͢Δ͜ͱͰΦϓτΞ΢τग़དྷΔ

Slide 33

Slide 33 text

SE-0412: Strict Concurrency for Global Variables Ұ෦ͷঢ়گͰ͸ɺಠࣗͷσʔλִ཭؅ཧʹґଘͰ͖ΔΑ͏ʹ੩తνΣοΫΛ ΦϓτΞ΢τ͢Δඞཁ͕͋Δ৔߹͕͋Δ ྫ: σʔλΞΫηεΛγϦΞϥΠζ͢ΔάϩʔόϧϩοΫͱؔ࿈෇͚ΒΕ͍ͯΔ৔߹ͳͲ nonisolated(unsafe) Λɺάϩʔόϧม਺ʹ࢖༻͢Δ͜ͱͰΦϓτΞ΢τग़དྷΔ

Slide 34

Slide 34 text

SE-0412: Strict Concurrency for Global Variables Ұ෦ͷঢ়گͰ͸ɺಠࣗͷσʔλִ཭؅ཧʹґଘͰ͖ΔΑ͏ʹ੩తνΣοΫΛ ΦϓτΞ΢τ͢Δඞཁ͕͋Δ৔߹͕͋Δ ྫ: σʔλΞΫηεΛγϦΞϥΠζ͢ΔάϩʔόϧϩοΫͱؔ࿈෇͚ΒΕ͍ͯΔ৔߹ͳͲ nonisolated(unsafe) Λɺάϩʔόϧม਺ʹ࢖༻͢Δ͜ͱͰΦϓτΞ΢τग़དྷΔ ͜ΕʹΑΓɺάϩʔόϧม਺ͷσʔλִ཭ͷ੩తνΣοΫ͸ແޮʹͳΔ ͨͩ͠ɺ͜ͷଐੑΛ࢖༻͢Δ৔߹͸σʔλ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊͷಉظϝΧχζϜ ʢϩοΫ΍ηϚϑΥͳͲʣΛࣗ෼ୡͰ࣮૷͢Δඞཁ͕͋Δ

Slide 35

Slide 35 text

Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables 􀇻 􀇻 􀇻

Slide 36

Slide 36 text

SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain

Slide 37

Slide 37 text

SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain @UIApplicationMain ͱ @NSApplicationMain͕ඇਪ঑ʹ @mainΛ࢖͓͏ʂ

Slide 38

Slide 38 text

Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables 􀇻 􀇻 􀇻 􀇻

Slide 39

Slide 39 text

SE-0327: On Actors and Initialization

Slide 40

Slide 40 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 41

Slide 41 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

No content

Slide 44

Slide 44 text

No content

Slide 45

Slide 45 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ

Slide 46

Slide 46 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢

Slide 47

Slide 47 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢ λεΫ͕ Actor ͷ Executor ্Ͱ࣮ߦ͞Ε͍ͯΔ৔߹ʹͷΈ ͦͷ Actor ͷִ཭͞Εͨঢ়ଶʹΞΫηεͰ͖Δ

Slide 48

Slide 48 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢ λεΫ͕ Actor ͷ Executor ্Ͱ࣮ߦ͞Ε͍ͯΔ৔߹ʹͷΈ ͦͷ Actor ͷִ཭͞Εͨঢ়ଶʹΞΫηεͰ͖Δ Actor ͷ Executor ΁ͷΞΫηεΛಘΔϓϩηε͸ λεΫ͔ΒͷΈʮඇಉظతʯʹߦΘΕΔ

Slide 49

Slide 49 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢ λεΫ͕ Actor ͷ Executor ্Ͱ࣮ߦ͞Ε͍ͯΔ৔߹ʹͷΈ ͦͷ Actor ͷִ཭͞Εͨঢ়ଶʹΞΫηεͰ͖Δ Actor ͷ Executor ΁ͷΞΫηεΛಘΔϓϩηε͸ λεΫ͔ΒͷΈʮඇಉظతʯʹߦΘΕΔ ↓ Actor ͷ֎෦͔Β Actor ͷඇಉظϝιουΛݺͼग़͢ࡍʹ͸ ՄೳͳதஅΛࣔ͢ҝʹ await ͕ඞཁʹͳΔ

Slide 50

Slide 50 text

"hopping" onto the executor Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢ λεΫ͕ Actor ͷ Executor ্Ͱ࣮ߦ͞Ε͍ͯΔ৔߹ʹͷΈ ͦͷ Actor ͷִ཭͞Εͨঢ়ଶʹΞΫηεͰ͖Δ Actor ͷ Executor ΁ͷΞΫηεΛಘΔϓϩηε͸ λεΫ͔ΒͷΈʮඇಉظతʯʹߦΘΕΔ ↓ Actor ͷ֎෦͔Β Actor ͷඇಉظϝιουΛݺͼग़͢ࡍʹ͸ ՄೳͳதஅΛࣔ͢ҝʹ await ͕ඞཁʹͳΔ → ͜ͷϓϩϙʔβϧͰ͸্هͷϓϩηεͷ͜ͱΛ ʮ ExecutorͷϗοϐϯάʯͱݺΜͰΔ

Slide 51

Slide 51 text

Actor ͸ Serial Executor ͱ͍͏ΩϡʔΛ͍࣋ͬͯΔ Actor ͸ϓϩύςΟ΁ͷΞΫηεΛ؅ཧ͢ΔͨΊʹ Executor Λ࢖༻͍ͯ͠Δ → ϩοΫͷΑ͏ͳ໾ׂΛՌͨ͢ λεΫ͕ Actor ͷ Executor ্Ͱ࣮ߦ͞Ε͍ͯΔ৔߹ʹͷΈ ͦͷ Actor ͷִ཭͞Εͨঢ়ଶʹΞΫηεͰ͖Δ Actor ͷ Executor ΁ͷΞΫηεΛಘΔϓϩηε͸ λεΫ͔ΒͷΈʮඇಉظతʯʹߦΘΕΔ ↓ ٯʹݴ͏ͱɺεϨουΛϒϩοΫͯ͠ΞΫηεΛ଴ͭ͜ͱ͸ Swift Concurrencyͷݪଇʹ൓͢Δ

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

init ͸Non-async

Slide 54

Slide 54 text

init ͸Non-async Ώ͑ʹ͜ͷதͰʢ௚઀తʹʣ͸ Executorʹϗοϐϯά͢Δ ͜ͱ͕Ͱ͖ͳ͍

Slide 55

Slide 55 text

No content

Slide 56

Slide 56 text

্ͷ෦෼Ͱ΋ increment() ͕ݺ͹Ε͍ͯΔͷͰ ڝ߹Λى͜͢Մೳੑ͕͋Δ

Slide 57

Slide 57 text

্ͷ෦෼Ͱ΋ increment() ͕ݺ͹Ε͍ͯΔͷͰ ڝ߹Λى͜͢Մೳੑ͕͋Δ ͜ΕΛ๷͙ͨΊʹɺSwift 5.5Ͱ͸Non-Acyncͳ init ಺ʹ͓͚Δ self ͷར༻ʹ੍ݶ͕ઃ͚ΒΕͨ

Slide 58

Slide 58 text

No content

Slide 59

Slide 59 text

্ͷ෦෼Ͱ΋ increment() ͕ݺ͹Ε͍ͯΔͷͰ ڝ߹Λى͜͢Մೳੑ͕͋Δ ͜ΕΛ๷͙ͨΊʹɺSwift 5.5Ͱ͸Non-Acyncͳ init ಺ʹ͓͚Δ self ͷར༻ʹ੍ݶ͕ઃ͚ΒΕͨ

Slide 60

Slide 60 text

্ͷ෦෼Ͱ΋ increment() ͕ݺ͹Ε͍ͯΔͷͰ ڝ߹Λى͜͢Մೳੑ͕͋Δ ͜ΕΛ๷͙ͨΊʹɺSwift 5.5Ͱ͸Non-Acyncͳ init ಺ʹ͓͚Δ self ͷར༻ʹ੍ݶ͕ઃ͚ΒΕͨ ↓ [՝୊] ͜ͷ੍ݶ͕ݫ͍͠

Slide 61

Slide 61 text

No content

Slide 62

Slide 62 text

ڝ߹ͷϦεΫ͕ͳ͍৔߹ʹ΋੍ݶ͕͔͔Γ warning͕ൃੜ͢Δ

Slide 63

Slide 63 text

[ิ଍] nonisolated ΩʔϫʔυΛ෇༩͢Δͱ warning͸ൃੜ͠ͳ͍

Slide 64

Slide 64 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 65

Slide 65 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 66

Slide 66 text

No content

Slide 67

Slide 67 text

init Ͱ͸ self ͷ੍ݶ͕ଘࡏͨ͠ ͔͠͠deinit಺ʹ͸ͦͷ੍ݶ͸ଘࡏ͠ͳ͍

Slide 68

Slide 68 text

deinit ಺Ͱ΋ init ͱಉ༷ʹσʔλϨʔε͕ ൃੜ͢ΔՄೳੑ͕͋Δ

Slide 69

Slide 69 text

deinit ಺Ͱ΋ init ͱಉ༷ʹσʔλϨʔε͕ ൃੜ͢ΔՄೳੑ͕͋Δ ͞Βʹɺ͜ͷඇಉظλεΫʹΑͬͯselfͷण໋Λ ʢdeinit ͷऴྃޙΛ௒͑ͯʣԆ͹ͯ͠ ͠·͏Մೳੑ͕͋Δ

Slide 70

Slide 70 text

deinit ಺Ͱ΋ init ͱಉ༷ʹσʔλϨʔε͕ ൃੜ͢ΔՄೳੑ͕͋Δ ͞Βʹɺ͜ͷඇಉظλεΫʹΑͬͯselfͷण໋Λ ʢdeinit ͷऴྃޙΛ௒͑ͯʣԆ͹ͯ͠ ͠·͏Մೳੑ͕͋Δ Object 0x6000025a4200 of class Counter deallocated with non-zero retain count 2. This object's deinit, or something called from it, may have created a strong reference to self which outlived deinit, resulting in a dangling reference. ࣮ߦ͢ΔͱΫϥογϡ͢Δ

Slide 71

Slide 71 text

SwiftͰ͸ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ 0 ʹͳΔͱ deinit ͕ݺͼग़͞ΕΔ Ϋϥογϡʹؔͯ͠ิ଍

Slide 72

Slide 72 text

SwiftͰ͸ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ 0 ʹͳΔͱ deinit ͕ݺͼग़͞ΕΔ deinit ͷ࣮ߦޙʹΦϒδΣΫτͷࢀরΧ΢ϯτ͕ ࠶౓ 1 ʹ૿͑Δ͜ͱ͸ະఆٛͷৼΔ෣͍Ͱ͋Δ Ϋϥογϡʹؔͯ͠ิ଍

Slide 73

Slide 73 text

SwiftͰ͸ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ 0 ʹͳΔͱ deinit ͕ݺͼग़͞ΕΔ deinit ͷ࣮ߦޙʹΦϒδΣΫτͷࢀরΧ΢ϯτ͕ ࠶౓ 1 ʹ૿͑Δ͜ͱ͸ະఆٛͷৼΔ෣͍Ͱ͋Δ Ώ͑ʹࢀরΧ΢ϯτ͕2౓໨ʹ0ʹͳΔͱ ϥϯμϜͳΫϥογϡ͕ൃੜ͢ΔݪҼͱͳΔ Ϋϥογϡʹؔͯ͠ิ଍

Slide 74

Slide 74 text

SwiftͰ͸ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ 0 ʹͳΔͱ deinit ͕ݺͼग़͞ΕΔ deinit ͷ࣮ߦޙʹΦϒδΣΫτͷࢀরΧ΢ϯτ͕ ࠶౓ 1 ʹ૿͑Δ͜ͱ͸ະఆٛͷৼΔ෣͍Ͱ͋Δ Ώ͑ʹࢀরΧ΢ϯτ͕2౓໨ʹ0ʹͳΔͱ ϥϯμϜͳΫϥογϡ͕ൃੜ͢ΔݪҼͱͳΔ ·ͨɺࢀরܕͷ deinit ʹ͓͚Δण໋Ԇ௕ͷ ໰୊͸Ұൠతͳ໰୊ʢclass΋ؚΊͯʣ Ϋϥογϡʹؔͯ͠ิ଍

Slide 75

Slide 75 text

SwiftͰ͸ΦϒδΣΫτͷࢀরΧ΢ϯτ͕ 0 ʹͳΔͱ deinit ͕ݺͼग़͞ΕΔ deinit ͷ࣮ߦޙʹΦϒδΣΫτͷࢀরΧ΢ϯτ͕ ࠶౓ 1 ʹ૿͑Δ͜ͱ͸ະఆٛͷৼΔ෣͍Ͱ͋Δ Ώ͑ʹࢀরΧ΢ϯτ͕2౓໨ʹ0ʹͳΔͱ ϥϯμϜͳΫϥογϡ͕ൃੜ͢ΔݪҼͱͳΔ ·ͨɺࢀরܕͷ deinit ʹ͓͚Δण໋Ԇ௕ͷ ໰୊͸Ұൠతͳ໰୊ʢclass΋ؚΊͯʣ ↓ কདྷͷผͷϓϩϙʔβϧͰղܾࡦΛݕ౼͢Δ ͜ͱʹͳΔ Ϋϥογϡʹؔͯ͠ิ଍

Slide 76

Slide 76 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 77

Slide 77 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 78

Slide 78 text

No content

Slide 79

Slide 79 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ

Slide 80

Slide 80 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ message ͸ SomeGlobalActor ʹִ཭͞Ε͍ͯΔ

Slide 81

Slide 81 text

count ͸ MainActor ʹִ཭͞Ε͍ͯΔ message ͸ SomeGlobalActor ʹִ཭͞Ε͍ͯΔ Initʹରͯ͠ͲͷΞΫλʔִ཭Λࢦఆ͢Ε͹Α͍ͷ͔͕ ໰୊ʹͳΔɻ count ͱ message ͕ҟͳΔάϩʔόϧΞΫλʔʹ ִ཭͞Ε͍ͯΔΏ͑ʹ1ͭͷΞΫλʔִ཭Λࢦఆ͢Δ͜ͱ͕ ෆՄೳͰ͋Δ

Slide 82

Slide 82 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 83

Slide 83 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 84

Slide 84 text

Swiftͷશͯͷϊϛφϧ (nominal) ܕʢΫϥεɺߏ଄ମɺྻڍܕʣ͸ ΠχγϟϥΠβͷҕৡΛαϙʔτ͍ͯ͠·Δ ͜Ε͸ɺ͋ΔΠχγϟϥΠβ͕ผͷΠχγϟϥΠβΛݺͼग़ͯ͠ ࢒ΓͷॳظԽΛߦ͏͜ͱΛҙຯ͢Δ Initializer Delegation

Slide 85

Slide 85 text

No content

Slide 86

Slide 86 text

No content

Slide 87

Slide 87 text

ΠχγϟϥΠβͷҕৡ͕ߦΘΕ͍ͯΔ ͨͩ͠ struct ͷ৔߹͸ɺinitΛҕৡ͢Δ৔߹ʹ͸ ͢΂ͯͷέʔεͰ self ͷ୅ೖ͔ self.init ͷ ݺͼग़͕͠ඞཁ

Slide 88

Slide 88 text

ΠχγϟϥΠβͷҕৡ͕ߦΘΕ͍ͯΔ ͨͩ͠ struct ͷ৔߹͸ɺinitΛҕৡ͢Δ৔߹ʹ͸ ͢΂ͯͷέʔεͰ self ͷ୅ೖ͔ self.init ͷ ݺͼग़͕͠ඞཁ

Slide 89

Slide 89 text

ΠχγϟϥΠβͷҕৡ͕ߦΘΕ͍ͯΔ ͨͩ͠ struct ͷ৔߹͸ɺinitΛҕৡ͢Δ৔߹ʹ͸ ͢΂ͯͷέʔεͰ self ͷ୅ೖ͔ self.init ͷ ݺͼग़͕͠ඞཁ Τϥʔ͕ൃੜ͢Δ

Slide 90

Slide 90 text

ΠχγϟϥΠβͷҕৡ͕ߦΘΕ͍ͯΔ class ͷ৔߹͸ܧঝͷؔ܎Ͱɺҕৡ͢Δ ΠχγϟϥΠβΛ۠ผ͢Δ໨తͰ comvinience Ωʔϫʔυ͕ඞཁʹͳΔ

Slide 91

Slide 91 text

actor ͷ৔߹͸ܧঝ͕ଘࡏ͠ͳ͍ ʹ΋͔͔ΘΒͣ Swift 5.5 ͷ؀ڥͰ͸ ΠχγϟϥΠβʔͷҠৡʹ͓͍ͯ convenience ΩʔϫʔυΛ࢖༻͢Δ͜ͱ͕ཁٻ͞Ε͍ͯͨ

Slide 92

Slide 92 text

actor ͷ৔߹͸ܧঝ͕ଘࡏ͠ͳ͍ ʹ΋͔͔ΘΒͣ Swift 5.5 ͷ؀ڥͰ͸ ΠχγϟϥΠβʔͷҠৡʹ͓͍ͯ convenience ΩʔϫʔυΛ࢖༻͢Δ͜ͱ͕ཁٻ͞Ε͍ͯͨ ↓ Swift 5.9.1 ͷ؀ڥͩͱ convenience Ωʔϫʔυ Λ෇༩͢Δͱ warning ͕ग़ΔΑ͏ʹͳ͍ͬͯͨ ↓ ղܾࡁΈͩͱࢥΘΕΔ

Slide 93

Slide 93 text

SE-0327: On Actors and Initialization 1. Non-asyncͳ init ͸ self Λ࢖ͬͯͰ͖Δ͜ͱ͕ݫ੍͘͠ݶ͞Ε͍ͯΔ 2. Actor ͷ deinit ͰσʔλϨʔε͕ൃੜ͢ΔՄೳੑ͕͋Δ 3. init ͷதͰʹৗʹ Global Actor ͷִ཭Λอ࣋͢Δ͜ͱ͕ Ͱ͖ͳ͍৔߹͕͋Δ 4. Actor ͕ܧঝΛαϙʔτ͍ͯ͠ͳ͍ʹ΋͔͔ΘΒͣ init ͷҕৡʹ͸Ϋϥεͱಉ༷ʹconvenienceΩʔϫʔυ͕ඞཁͳ͜ͱ ݱঢ়ͷ໰୊఺

Slide 94

Slide 94 text

Swift 5.10 SE-0327: On Actors and Initialization SE-0383: Deprecate @UIApplicationMain and @NSApplicationMain SE-0404: Allow Protocols to be Nested in Non-Generic Contexts SE-0411: Isolated Default Value Expressions SE-0412: Strict Concurrency for Global Variables 􀇻 􀇻 􀇻 􀇻 􀇻

Slide 95

Slide 95 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

Slide 96

Slide 96 text

ࢀߟҾ༻จݙ https://github.com/apple/swift-evolution/blob/main/proposals/0327-actor-initializers.md https://github.com/apple/swift-evolution/blob/main/proposals/0383-deprecate- uiapplicationmain-and-nsapplicationmain.md https://github.com/apple/swift-evolution/blob/main/proposals/0404-nested- protocols.md https://github.com/apple/swift-evolution/blob/main/proposals/0411-isolated-default- values.md https://github.com/apple/swift-evolution/blob/main/proposals/0412-strict-concurrency- for-global-variables.md https://zenn.dev/koher/articles/swift-concurrency-cheatsheet