Slide 1

Slide 1 text

Swi$ Yuta Koshizawa @koher

Slide 2

Slide 2 text

2021 : Swi) 5.5 2025 : Swi) 6.2

Slide 3

Slide 3 text

Swi$ 5.5ͰSwi$ ConcurrencyΛಋೖ Swi$ Concurrencyͱ͸ɺฒߦॲཧؔ࿈ͷػೳ܈

Slide 4

Slide 4 text

4೥ؒͰ࠷େͷΞοϓσʔτ͸ Swi% 6ͷϦϦʔεʢ2024ʣ

Slide 5

Slide 5 text

Ұ൪Өڹ͕େ͖͔ͬͨͷ͸ Strict Concurrency Checking

Slide 6

Slide 6 text

σʔλڝ߹Λى͜͠ಘΔίʔυ ↓ ⛔ ίϯύΠϧΤϥʔ

Slide 7

Slide 7 text

ίϯύΠϧ͕௨Δ ↓ ✅ σʔλڝ߹͕ى͜Βͳ͍

Slide 8

Slide 8 text

Strict Concurrency Checking

Slide 9

Slide 9 text

Swi$ 6Ͱ͸ Pure Swi)ͰunsafeͳߏจΛ࢖Θͳ͚Ε͹ Swi)ͷίʔυ͸σʔλڝ߹Λى͜͞ͳ͍

Slide 10

Slide 10 text

σʔλڝ߹ͱ͸ʁ ෳ਺ͷεϨου͔Βಉ͡ϝϞϦྖҬʹಉ࣌ʹΞΫηε͠ɺগͳ͘ ͱ΋ͦͷҰ͕ͭॻ͖ࠐΈͰ͋Δͱ͖ʹى͜Δݱ৅

Slide 11

Slide 11 text

σʔλڝ߹͕ى͜Δͱ • ະఆٛಈ࡞ • σʔλෆ੔߹ • Ϋϥογϡ • …

Slide 12

Slide 12 text

σʔλڝ߹ʹΑΔόάʹ͸ରॲͮ͠Β͍ • ໰୊Λ࠶ݱ͢Δ͜ͱ͕ࠔ೉ • ݪҼ͕σʔλڝ߹Ͱ͋Δͱಥ͖ࢭΊΔͷ͕ࠔ೉ • ίʔυΛमਖ਼ͯ͠ղܾ͞Εͨ͜ͱͷ֬ೝ͕ࠔ೉

Slide 13

Slide 13 text

σʔλڝ߹Λػցతʹ๷ࢭͰ͖Δͱ͏Ε͍͠

Slide 14

Slide 14 text

ݪҼෆ໌ͷΫϥογϡͷ΄ͱΜͲ͕ σʔλڝ߹ʹΑͬͯҾ͖ى͜͞Ε͍ͯͨྫ΋

Slide 15

Slide 15 text

ίϯύΠϥ͕ͲͷΑ͏ʹͯ͠ σʔλڝ߹Λ๷͙ͷ͔

Slide 16

Slide 16 text

Swi$ίϯύΠϥ͸ ܕΛ࢖ͬͯσʔλڝ߹Λ๷͙

Slide 17

Slide 17 text

Swi$͸ܕΛݫ֨ʹѻ͏ݴޠ

Slide 18

Slide 18 text

2014೥ͷϦϦʔε౰ॳ͔Βnull safetyΛ࣋ͭ let values = [2, 3, 5, 7] print(values.first + 1) // ⛔ ίϯύΠϧΤϥʔ

Slide 19

Slide 19 text

2014೥ͷϦϦʔε౰ॳ͔Βnull safetyΛ࣋ͭ let values = [2, 3, 5, 7] if let first = values.first { print(first + 1) // ✅ OK: 3 }

Slide 20

Slide 20 text

֤ݴޠͰͷ Op$onal / Nullable Type • Kotlin: String? • Python: str | None • TypeScript: string | null | undefined • ...

Slide 21

Slide 21 text

Swi$͕ܕΛ࢖ͬͯ σʔλڝ߹Λ๷͙ͷ͸Swi$Β͍͠

Slide 22

Slide 22 text

Ωʔϫʔυ͸ Isola&on Domain ͱ Sendable

Slide 23

Slide 23 text

Isola&on Domainͱ͸ • Swi%ͷϓϩάϥϜ͸ෳ਺ͷIsola+on Domainʹ෼ׂ͞ΕΔ • ͢΂ͯͷॲཧ͸͍ͣΕ͔ͷIsola+on Domain্Ͱ࣮ߦ͞ΕΔ • ҰͭͷIsola+on Domain্Ͱ͸ɺಉ࣌ʹҰͭͷॲཧ͔࣮͠ߦ͞Ε ͳ͍

Slide 24

Slide 24 text

⚠ Isola'on Domain͸εϨουͰ͸ͳ͍ ్த·ͰεϨουAͰ࣮ߦ͞Ε ଓ͖͕εϨουBͰ࣮ߦ͞Εͯ΋ྑ͍

Slide 25

Slide 25 text

Isola&on Domainͱ͸ • Swi%ͷϓϩάϥϜʹ͸ෳ਺ͷIsola+on Domainʹ෼ׂ͞ΕΔ • ͢΂ͯͷॲཧ͸͍ͣΕ͔ͷIsola+on Domain্Ͱ࣮ߦ͞ΕΔ • ҰͭͷIsola+on Domain্Ͱ͸ɺಉ࣌ʹҰͭͷॲཧ͔࣮͠ߦ͞Ε ͳ͍

Slide 26

Slide 26 text

ͲͷΑ͏ͳσʔλ΋ ୯ҰͷIsola&on DomainͰѻ͍ͬͯΔݶΓ σʔλڝ߹ΛҾ͖ى͜͞ͳ͍

Slide 27

Slide 27 text

ෳ਺ͷIsola&on DomainͰ σʔλΛڞ༗͍ͨ͠ͱ͖͸ʁ

Slide 28

Slide 28 text

ෳ਺Isola&on DomainͰڞ༗ͯ҆͠શͳܕͱ ҆શͰͳ͍ܕΛ۠ผ͢Δ

Slide 29

Slide 29 text

ෳ਺Isola&on DomainͰڞ༗ͯ͠΋҆શͳܕ Sendable

Slide 30

Slide 30 text

ΠϛϡʔλϒϧΫϥε͸ڞ༗͞Εͯ΋҆શ final class Foo: Sendable { // Sendable४ڌՄ let value: Int // ෆม init(value: Int) { self.value = value } } ΠϛϡʔλϒϧΫϥε͸ঢ়ଶ͕มߋ͞Εͳ͍ͷͰɺෳ਺ͷ Isola&on DomainؒͰڞ༗ͯ͠΋σʔλڝ߹ͷݪҼͱͳΒͳ͍

Slide 31

Slide 31 text

ϛϡʔλϒϧΫϥε͸ڞ༗͞ΕΔͱ҆શͰͳ͍ final class Foo: Sendable { // ίϯύΠϧΤϥʔ var value: Int // Մม init(value: Int) { self.value = value } } ෳ਺ͷIsola&on Domain͔Βಉ࣌ʹΞΫηε͞Εͨͱ͖ʹσʔλڝ ߹ͷݪҼͱͳΓಘΔͷͰ Sendable ४ڌͰ͖ͳ͍

Slide 32

Slide 32 text

ϩοΫ౳Ͱอޢ͢Ε͹ϛϡʔλϒϧΫϥεͰ΋҆શ final class Foo: Sendable { // Sendable४ڌՄ private let lock: OSAllocatedUnfairLock var value: Int { get { lock.withLock { $0 } } set { lock.withLock { $0 = newValue } } } init(value: Int) { self.lock = .init(initialState: value) } }

Slide 33

Slide 33 text

஋ܕ͸ڞ༗͞Εͣίϐʔ͞ΕΔͷͰ҆શ struct Foo: Sendable { // ✅ Sendable४ڌՄ var value: Int // Մม init(value: Int) { self.value = value } }

Slide 34

Slide 34 text

Actor͸ݸʑͷIsola*on DomainΛ࣋ͭͷͰ҆શ actor Foo { // ҉໧తʹSendable४ڌ var value: Int // Մม init(value: Int) { self.value = value } } Actor͸ݸʑͷΠϯελϯε͕Isola*on DomainΛܗ੒͠ɺॴଐ͢ Δίʔυ͕ݸʑͷIsola*on Domain্Ͱ࣮ߦ͞ΕΔ

Slide 35

Slide 35 text

final class Foo { // non-Sendable var value: Int = 42 } actor A { func useFoo(_ foo: Foo) { print(foo.value) // σʔλڝ߹Λى͜͠ಘΔ } } let foo = Foo() let a = A() await a.useFoo(foo) // ⛔ ผͷIsolation Domainʹ͸౉ͤͳ͍ foo.value += 1 // σʔλڝ߹Λى͜͠ಘΔ

Slide 36

Slide 36 text

struct Foo: Sendable { var value: Int = 42 } actor A { func useFoo(_ foo: Foo) { print(foo.value) // σʔλڝ߹Λى͜͞ͳ͍ } } let foo = Foo() let a = A() await a.useFoo(foo) // ✅ ผͷIsolation Domainʹ͸౉ͤΔ foo.value += 1 // σʔλڝ߹Λى͜͞ͳ͍

Slide 37

Slide 37 text

No content

Slide 38

Slide 38 text

ܕͷ Sendable ४ڌΛར༻ͯ͠ ίϯύΠϥ͕σʔλڝ߹Λ๷ࢭ

Slide 39

Slide 39 text

ͦͷଞ

Slide 40

Slide 40 text

ଟ༷ͳϓϥοτϑΥʔϜ΁ͷల։ • Linux • Windows • WebAssembly

Slide 41

Slide 41 text

ଟ༷ͳ༻్Ͱͷར༻ • αʔόʔαΠυ1 • ϒϥ΢βʢWebAssemblyʣ2 • ૊ΈࠐΈ3 3 ࣄྫ: h%ps:/ /github.com/swi3lang/swi3-playdate-examples 2 ࣄྫ: h%ps:/ /www.youtube.com/watch?v=Q4Tqxe06Pw0 1 ࣄྫ: h%ps:/ /www.swi,.org/blog/swi,-at-apple-migra7ng-the-password-monitoring-service-from-java/

Slide 42

Slide 42 text

ଟ༷ͳݴޠͱͷ࿈ܞ • C/C++4 • Java5 • JavaScript6 • Python7 7 h$ps:/ /github.com/pvieito/PythonKit 6 h$ps:/ /github.com/swi3wasm/JavaScriptKit 5 h$ps:/ /developer.apple.com/videos/play/wwdc2025/307/ 4 h$ps:/ /www.swi,.org/documenta8on/cxx-interop/

Slide 43

Slide 43 text

৽͍͠ݴޠػೳ • ϚΫϩ • ॴ༗ݖ • Parameter PacksʢՄม௕ܕύϥϝʔλʣ • InlineArray ʢݻఆ௕഑ྻʣ • Integer Generic Parameters ʢܕύϥϝʔλʹ੔਺Λࢦఆʣ • …

Slide 44

Slide 44 text

·ͱΊ • Swi% 6ͰStrict Concurrency Checking͕ಋೖ • Pure Swi%Ͱ͸ίϯύΠϥ͕σʔλڝ߹Λ׬શʹ๷ࢭ • ଟ༷ͳϓϥοτϑΥʔϜ΍༻్ʹల։ • ͦͷଞʹ΋ϚΫϩͳͲศརͳ৽ػೳΛ௥Ճ

Slide 45

Slide 45 text

΋͠Swi$ʹڵຯΛ࣋ͬͨΒ "The Swi) Programming Language"8 ༗ࢤʹΑΔ೔ຊޠ൛9΋͋Γ·͢ 9 h$ps:/ /www.swi,langjp.com/ 8 h$ps:/ /docs.swi/.org/swi/-book/documenta;on/the-swi/-programming-language