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
Try C++ module! - meetup app osaka@5
Search
Akiko Kawai
January 29, 2021
Programming
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Try C++ module! - meetup app osaka@5
Akiko Kawai
January 29, 2021
More Decks by Akiko Kawai
See All by Akiko Kawai
Unity Scripting Backend - C++breaktime 2026 Summer
harukasao
0
95
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
580
How to call c# from c++ - meetup app osaka@10
harukasao
0
56
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
330
Coding Experience Cpp vs Csharp - meetup app osaka@9
harukasao
0
1.3k
Selected MAUI Blazor - meetup app osaka@8
harukasao
0
170
シミュレーター制作の感想/ Tried developing Simulator at .NET Lab 201910
harukasao
0
120
NimTorchの紹介 / Introduce NimTorch meetup app osaka @3
harukasao
0
920
std::optionalの使い方 / how to use optional nakamecpp_13
harukasao
0
2.7k
Other Decks in Programming
See All in Programming
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.4k
What's New in Android 2026
veronikapj
0
260
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
380
Apache Hive: そしてCloud Native Lakehouseへ
okumin
1
220
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.6k
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.6k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
270
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.5k
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
260
Laravel Boostに学ぶ、AIにPHPを書かせる技術 〜OSSの実装から蒸留するエージェント制御の王道〜
kentaroutakeda
3
690
仕様駆動開発へのトライを機に チームに適合する手法を模索し続けている話
freee
PRO
0
500
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
64
56k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
400
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
700
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.5k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
KATA
mclloyd
PRO
35
15k
Designing for Timeless Needs
cassininazir
1
440
WCS-LA-2024
lcolladotor
0
790
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
Transcript
/ Try C++ module! Try C++ module! 2021/1/30 Sat meetupapp
osaka @5 遥佐保(はるかさお)
/ 今⽇のお題
/ C++20 modules C++20 modules C++20 で新たに導⼊される module … #include
の代替え⼿段とのことで期待⼤です… これまでのC++のコードの構造と アーキテクチャに ⼤きな影響を与える機能なんじゃ ないかな〜と思います
/ ビルドの流れのおさらい ビルドの流れのおさらい C++のコードから実際に実⾏形式ができるまでの概念
/ そのうち今回関係あるもの プリプロセッサ ヘッダーとソースファイルの分割 コンパイルが開始される前に 翻訳単位(コンパイルの単位)ごとに処理
/ includeの何が問題なの︖ includeの何が問題なの︖ #include “foo.h” はファイルの⽂字列内容を 展開してるだけで、⽂法的な意味はない C# の using
に似てるように⾒えるかもだが全然違う // foo.h class FOO{ int f; }; // main.cpp #include "foo.h" FOO F;
/ <ヘッダーファイルの問題> include する順番の考慮 複数回定義対応のインクルードガード STLなど複雑なテンプレートのコンパイル時間が ⻑くなる そこで module の登場です︕
/ module にするメリット module にするメリット コンパイルされたバイナリに出来る PCHと似たような機能(正式に標準化) export で明⽰的に公開してるものだけが import
で利⽤できる(副作⽤が無い) 既存のヘッダーファイルと共存が可能
/ moduleファイルのサンプル // moduleファイル // 拡張子はなんでも良いけどVC++的には .ixxとしてるみたい // 他のサンプルだと .cppm
が多そう // モジュール名を定義し、それをインポートできるようにします export module NumberCruncher; // module内部で他のmoduleもinport出来る import logger; // module内のマクロは公開されない(汚染がない) #define CRUNCH_FACTOR 3.14
/ moduleファイルのサンプル(続き) namespace numbers { // ↓↓↓明示的にexportされてないので、import側では利用できない float applyCrunchFactor(float number)
{ return number * CRUNCH_FACTOR; } // exportキーワードを書いて、importで利用できるようにする // (これは実装をここに書いてるパターン、他のファイルに実装を分割もできる) export float crunch(float number) { // 内部関数を利用 auto crunched = applyCrunchFactor(number); // 他のmoduleの関数を利用 logger::info("Crunched {} with result of {}", number, crunche return crunched; } }
/ module を利⽤する側 // main.cpp import NumberCruncher; // カスタムmoduleのインポート int
main() { auto value = numbers::crunch(42); }
/ moduleのデメリット moduleのデメリット (と思われている点) includeによるヘッダーファイルの展開がないの で、コンパイル時の解析が早くなるはず… 逆に⾔うと、モジュールの依存関係準にコン パイルする必要があり(今まで出来ていた) コンパイルの並列化がしにくい (普通のPCでビルドする分には早くなると思う
分散環境構築のIncrediBuildさん等は 考慮が必要そうな予感)
/ 今回は最初の使い⽅のみの紹介でした 実際に module を利⽤しようと思ったら 新規概念の「到達可能(Reachable)」の理解や 意図しないODR違反などが出る可能性など 考慮すべき項⽬は多そうです
/ 参考 C++20 in 2020: Modules - Inside PSPDFKit Current
Status - isocpp A Tour of C++ Modules in Visual Studio - C++ Tema Blog https://pspdfkit.com/blog/2020/cpp20-in-2020- modules/ https://isocpp.org/std/status https://devblogs.microsoft.com/cppblog/a-tour-of- cpp-modules-in-visual-studio/
/ C++ のモジュールの概要 - Microsoft Docs モジュール - cpprefjp [C++]モジュール理論
基礎編 - 地⾯を⾒下ろす少年 の⾜蹴にされる私 https://docs.microsoft.com/ja-jp/cpp/cpp/modules- cpp?view=msvc-160 https://cpprefjp.github.io/lang/cpp20/modules.html https://onihusube.hatenablog.com/entry/2019/07/07