Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Swift 5.9 と C++ の互換性
Search
h.crane
March 06, 2024
Technology
1
680
Swift 5.9 と C++ の互換性
Event
集まれSwift好き!Swift愛好会 vol.80
Details
Qiita:
https://qiita.com/hcrane/items/081dd77bd593f1ea74af
h.crane
March 06, 2024
Tweet
Share
More Decks by h.crane
See All by h.crane
Getting started with controlling LEGO using Swift
hcrane
1
1.1k
Live on iOSDC2023
hcrane
4
1.3k
自販機で1000円を使い切りたいんじゃ!
hcrane
0
130
Vision.framework - 商品画像からのテキスト検出と並列化実装への試み
hcrane
1
740
DevRel/Japan 2023 - 1つの事業部だけで行う DevRel とは
hcrane
0
980
R2-D2をiOSで動かす
hcrane
2
3k
iOSDC2022 - SwiftUI in UIKit で開発する世界
hcrane
6
6.9k
iOSDC2022 - iPadOSDC Japan 2022
hcrane
2
3.9k
iOSDC2021 - Compositional Layoutsで実現する疎結合な実装
hcrane
3
5.1k
Other Decks in Technology
See All in Technology
人はなぜISUCONに夢中になるのか
kakehashi
PRO
6
1.6k
Platform Engineeringは自由のめまい
nwiizo
4
2.1k
Oracle Cloud Infrastructure:2025年2月度サービス・アップデート
oracle4engineer
PRO
1
200
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
0
230
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
24
7k
データマネジメントのトレードオフに立ち向かう
ikkimiyazaki
6
950
スタートアップ1人目QAエンジニアが QAチームを立ち上げ、“個”からチーム、 そして“組織”に成長するまで / How to set up QA team at reiwatravel
mii3king
2
1.5k
The Future of SEO: The Impact of AI on Search
badams
0
190
2/18/25: Java meets AI: Build LLM-Powered Apps with LangChain4j
edeandrea
PRO
0
110
飲食店予約台帳を支えるインタラクティブ UI 設計と実装
siropaca
7
1.7k
クラウドサービス事業者におけるOSS
tagomoris
1
560
明日からできる!技術的負債の返済を加速するための実践ガイド~『ホットペッパービューティー』の事例をもとに~
recruitengineers
PRO
3
390
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
RailsConf 2023
tenderlove
29
1k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
12
960
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
Mobile First: as difficult as doing things right
swwweet
223
9.3k
Docker and Python
trallard
44
3.3k
Transcript
March 7, 2024, ू·ΕSwift͖ʂSwiftѪձ vol.80 Hiromu Tsuruta @ Rakuten Group,
Inc. Swift 5.9 ͱ C++ ͷޓੑ
<Company> ・Rakuten Group, Inc <Application> ・Rakuma
<Role> ・iOS Developer ・Developer Relations <Account> ・Twitter:@hcrane14 Tech Lead
ࠓ·Ͱͷ Swift ͱ C++ ͷޓੑ
ᶃ Objective-C++ ͰϒϦοδ͢Δ ᶄ C ͰϒϦοδ͢ΔʢC++ ͷػೳ extern "C" Λ͏ʣ
ᶅ SPM ͔Β module.modulemap Ͱެ։͢Δ
ํ๏ ᶃ Objective-C++ ͰϒϦοδ͢Δ
Swift Objective-C++ C++
Live on iOSDC2023 Ҿ༻ɿhttps://photos.google.com/share/AF1QipNFYcoT0g9XcxuTm8rsNZp7i4JrBKj10iTzj4abxZfTfwTIEzHPF0OSow6P4ClskA?pli=1&key=VmVfLTU1aWExX1BRX21KMDJhajZqRktmZngzWmt3
iOSDCͷొஃ༰ ͜ͷํ๏Ͱͨ͠
Ҿ༻ɿhttps://speakerdeck.com/hcrane/live-on-iosdc2023?slide=47
Ҿ༻ɿhttps://speakerdeck.com/hcrane/live-on-iosdc2023?slide=48
؆୯ͳ࣮αϯϓϧ
C++ ͷ࣮ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιουΛ࣋ͬͨΫϥε
Objective-C++ ͷ࣮ϑΝΠϧͱϔομʔϑΝΠϧ C++ͷίʔυΛݺͼग़͢ ϥούʔΫϥε
ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ Objective-C++ ͷϔομʔΛՃ͢Δ
Swift ͷ࣮ߦϑΝΠϧ Swift ͔Β Objective-C++ Λݺͼग़ͤΔʂ → ݁Ռͱͯ͠ C++ Λݺͼग़ͤΔ
ํ๏ ᶄ C ͰϒϦοδ͢Δ ʢC++ ͷػೳ extern "C" Λ͏ʣ
Swift C C++
؆୯ͳ࣮αϯϓϧ
Step.1 Swift ͔Β C Λݺͼग़͢؆୯ͳྫ
Swift C ͱޓੑ͕͋Δ
C ͷ࣮ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιου
ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C ͷϔομʔΛՃ͢Δ
Swift ͔Β C Λݺͼग़ͤΔʂ ʢޓੑ͕͋ΔͷͰϔομʔΛՃ͢Δ͚ͩͰ؆୯ʂʣ Swift ͷ࣮ߦϑΝΠϧ
Step. 2 Swift ͔Β C ܦ༝Ͱ C++ Λݺͼग़͢؆୯ͳྫ
C++ ͷػೳ extern "C" Λ͏
extern "C" ʹؔͯ͠ • C++ ͷݴޠػೳ • C++ Λ Cݴޠͱͯ͠ѻ͏Α͏͢Δ
• C++ ͱ CݴޠͷίϯύΠϥͰޓੑ͕ͳ͍࣌ʹ extern "C" Ͱճආ͢Δ → Swift Ͱ͑ C++ Λݺͼग़͢ͷʹ͑Δ
C++ ͷ࣮ϑΝΠϧͱϔομʔϑΝΠϧ extern "C" ͰғͬͨจࣈྻΛग़ྗ ͢Δ͚ͩͷ؆୯ͳϝιου
ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C++ ͷϔομʔΛՃ͢Δ ʢ#include ͳ͜ͱʹҙʣ
Swift ͔Β C ܦ༝Ͱ C++ Λݺͼग़ͤΔʂ Swift ͷ࣮ߦϑΝΠϧ
͜ͷํ๏ͷ੍ • C++ͷؔΛCݴޠͱͯ͠એݴ͢Δ߹ɺܕCݴޠ͕αϙʔτ͢Δܕ Ͱͳ͚ΕͳΒͳ͍ɻ(C++ ͷಛఆͷܕɾࢀরɾΫϥε NGʣ • C++ͷ໊લम০͕ແޮԽ͞ΕΔɻʢΦʔόʔϩʔυ͞Εͨؔ NGʣ etc.
ํ๏ ᶅ SPM ͔Β module.modulemap Ͱެ։͢Δ
Swift Swift Package Manager C++ module.modulemap
module.modulemap ʹؔͯ͠ • Bridging Header ͷ্Ґޓ • Objective-C / C
ͷγϯϘϧʢؔɺมɺܕɺఆʣʹΞΫηεͰ͖Δ etc.
Swift ͔Β SPM ܦ༝Ͱ؆୯ʹ C++ Λݺͼग़ͤΔʂ module.modulemap ϑΝΠϧ
ઌʹհͨ͠ํ๏ ᶃ, ᶄ Ͱ SPM ͔Β͏͜ͱ͕Ͱ͖Δ
͜Ε͔Βͷ Swift ͱ C++ ͷޓੑ
C++ interoperability
؆୯ͳ࣮αϯϓϧ
C++ ͷ࣮ϑΝΠϧͱϔομʔϑΝΠϧ จࣈྻΛग़ྗ͢Δ͚ͩͷ؆୯ͳϝιουΛ࣋ͬͨΫϥε
ϓϩδΣΫτͷϔομʔϑΝΠϧ ϓϩδΣΫτͷϔομʔʹ C++ ͷϔομʔΛՃ͢Δ ʢ#include ͳ͜ͱʹҙʣ
interoperability ͷઃఆΛ C/Objective-C → C++/Objective-C++ ϓϩδΣΫτͷઃఆ
Swift ͔Β C++ Λݺͼग़ͤΔʂ Swift ͷ࣮ߦϑΝΠϧ
Objective-C / C ͱಉ͡ཁྖͰ C++ Λݺͼग़ͤΔʂ
ҙ ઃఆ͕มΘΔͷͰ C ݴޠϏϧυͰ͖ͳ͘ͳΔ ʢͨͩ͠ɺObjective-C ϏϧυͰ͖Δʣ → C ͱ C++
ͷίʔυΛࠞࡏͰ͖ͳ͘ͳΔ
Swift ͱ C++ Λߟͨ͠هࣄ Ҿ༻ɿhttps://kateinoigakukun.hatenablog.com/entry/2020/12/01/083949