Slide 1

Slide 1 text

March 7, 2024, ू·ΕSwift޷͖ʂSwiftѪ޷ձ vol.80 Hiromu Tsuruta @ Rakuten Group, Inc. Swift 5.9 ͱ C++ ͷޓ׵ੑ

Slide 2

Slide 2 text

                              ・Rakuten Group, Inc                   ・Rakuma        ・iOS Developer    ・Developer Relations                              ・Twitter:@hcrane14 Tech Lead

Slide 3

Slide 3 text

ࠓ·Ͱͷ Swift ͱ C++ ͷޓ׵ੑ

Slide 4

Slide 4 text

ᶃ Objective-C++ ͰϒϦοδ͢Δ ᶄ C ͰϒϦοδ͢ΔʢC++ ͷػೳ extern "C" Λ࢖͏ʣ ᶅ SPM ͔Β module.modulemap Ͱެ։͢Δ

Slide 5

Slide 5 text

ํ๏ ᶃ Objective-C++ ͰϒϦοδ͢Δ

Slide 6

Slide 6 text

Swift Objective-C++ C++

Slide 7

Slide 7 text

Live on iOSDC2023 Ҿ༻ɿhttps://photos.google.com/share/AF1QipNFYcoT0g9XcxuTm8rsNZp7i4JrBKj10iTzj4abxZfTfwTIEzHPF0OSow6P4ClskA?pli=1&key=VmVfLTU1aWExX1BRX21KMDJhajZqRktmZngzWmt3

Slide 8

Slide 8 text

iOSDCͷొஃ಺༰͸ ͜ͷํ๏Ͱͨ͠

Slide 9

Slide 9 text

Ҿ༻ɿhttps://speakerdeck.com/hcrane/live-on-iosdc2023?slide=47

Slide 10

Slide 10 text

Ҿ༻ɿhttps://speakerdeck.com/hcrane/live-on-iosdc2023?slide=48

Slide 11

Slide 11 text

؆୯ͳ࣮૷αϯϓϧ

Slide 12

Slide 12 text

C++ ͷ࣮૷ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιουΛ࣋ͬͨΫϥε

Slide 13

Slide 13 text

Objective-C++ ͷ࣮૷ϑΝΠϧͱϔομʔϑΝΠϧ C++ͷίʔυΛݺͼग़͢ ϥούʔΫϥε

Slide 14

Slide 14 text

ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ Objective-C++ ͷϔομʔΛ௥Ճ͢Δ

Slide 15

Slide 15 text

Swift ͷ࣮ߦϑΝΠϧ Swift ͔Β Objective-C++ Λݺͼग़ͤΔʂ → ݁Ռͱͯ͠ C++ Λݺͼग़ͤΔ

Slide 16

Slide 16 text

ํ๏ ᶄ C ͰϒϦοδ͢Δ ʢC++ ͷػೳ extern "C" Λ࢖͏ʣ

Slide 17

Slide 17 text

Swift C C++

Slide 18

Slide 18 text

؆୯ͳ࣮૷αϯϓϧ

Slide 19

Slide 19 text

Step.1 Swift ͔Β C Λݺͼग़͢؆୯ͳྫ

Slide 20

Slide 20 text

Swift ͸ C ͱޓ׵ੑ͕͋Δ

Slide 21

Slide 21 text

C ͷ࣮૷ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιου

Slide 22

Slide 22 text

ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C ͷϔομʔΛ௥Ճ͢Δ

Slide 23

Slide 23 text

Swift ͔Β C Λݺͼग़ͤΔʂ ʢޓ׵ੑ͕͋ΔͷͰϔομʔΛ௥Ճ͢Δ͚ͩͰ؆୯ʂʣ Swift ͷ࣮ߦϑΝΠϧ

Slide 24

Slide 24 text

Step. 2 Swift ͔Β C ܦ༝Ͱ C++ Λݺͼग़͢؆୯ͳྫ

Slide 25

Slide 25 text

C++ ͷػೳ extern "C" Λ࢖͏

Slide 26

Slide 26 text

extern "C" ʹؔͯ͠ • C++ ͷݴޠػೳ • C++ Λ Cݴޠͱͯ͠ѻ͏Α͏͢Δ • C++ ͱ CݴޠͷίϯύΠϥͰޓ׵ੑ͕ͳ͍࣌ʹ extern "C" Ͱճආ͢Δ → Swift Ͱ࢖͑͹ C++ Λݺͼग़͢ͷʹ࢖͑Δ

Slide 27

Slide 27 text

C++ ͷ࣮૷ϑΝΠϧͱϔομʔϑΝΠϧ extern "C" ͰғͬͨจࣈྻΛग़ྗ ͢Δ͚ͩͷ؆୯ͳϝιου

Slide 28

Slide 28 text

ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C++ ͷϔομʔΛ௥Ճ͢Δ ʢ#include ͳ͜ͱʹ஫ҙʣ

Slide 29

Slide 29 text

Swift ͔Β C ܦ༝Ͱ C++ Λݺͼग़ͤΔʂ Swift ͷ࣮ߦϑΝΠϧ

Slide 30

Slide 30 text

͜ͷํ๏ͷ੍໿ • C++ͷؔ਺ΛCݴޠͱͯ͠એݴ͢Δ৔߹ɺܕ͸Cݴޠ͕αϙʔτ͢Δܕ Ͱͳ͚Ε͹ͳΒͳ͍ɻ(C++ ͷಛఆͷܕɾࢀরɾΫϥε͸ NGʣ • C++ͷ໊લम০͕ແޮԽ͞ΕΔɻʢΦʔόʔϩʔυ͞Εͨؔ਺͸ NGʣ etc.

Slide 31

Slide 31 text

ํ๏ ᶅ SPM ͔Β module.modulemap Ͱެ։͢Δ

Slide 32

Slide 32 text

Swift Swift Package Manager C++ module.modulemap

Slide 33

Slide 33 text

module.modulemap ʹؔͯ͠ • Bridging Header ͷ্Ґޓ׵ • Objective-C / C ͷγϯϘϧʢؔ਺ɺม਺ɺܕɺఆ਺ʣʹΞΫηεͰ͖Δ etc.

Slide 34

Slide 34 text

Swift ͔Β SPM ܦ༝Ͱ؆୯ʹ C++ Λݺͼग़ͤΔʂ module.modulemap ϑΝΠϧ

Slide 35

Slide 35 text

ઌʹ঺հͨ͠ํ๏ ᶃ, ᶄ Ͱ΋ SPM ͔Β࢖͏͜ͱ͕Ͱ͖Δ

Slide 36

Slide 36 text

͜Ε͔Βͷ Swift ͱ C++ ͷޓ׵ੑ

Slide 37

Slide 37 text

C++ interoperability

Slide 38

Slide 38 text

؆୯ͳ࣮૷αϯϓϧ

Slide 39

Slide 39 text

C++ ͷ࣮૷ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιουΛ࣋ͬͨΫϥε

Slide 40

Slide 40 text

ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C++ ͷϔομʔΛ௥Ճ͢Δ ʢ#include ͳ͜ͱʹ஫ҙʣ

Slide 41

Slide 41 text

interoperability ͷઃఆΛ C/Objective-C → C++/Objective-C++ ϓϩδΣΫτͷઃఆ

Slide 42

Slide 42 text

Swift ͔Β C++ Λݺͼग़ͤΔʂ Swift ͷ࣮ߦϑΝΠϧ

Slide 43

Slide 43 text

Objective-C / C ͱಉ͡ཁྖͰ C++ Λݺͼग़ͤΔʂ

Slide 44

Slide 44 text

஫ҙ఺ ઃఆ͕มΘΔͷͰ C ݴޠ͸ϏϧυͰ͖ͳ͘ͳΔ ʢͨͩ͠ɺObjective-C ͸ϏϧυͰ͖Δʣ → C ͱ C++ ͷίʔυΛࠞࡏͰ͖ͳ͘ͳΔ

Slide 45

Slide 45 text

Swift ͱ C++ Λߟ࡯ͨ͠هࣄ Ҿ༻ɿhttps://kateinoigakukun.hatenablog.com/entry/2020/12/01/083949