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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Akiko Kawai
January 29, 2021
Programming
500
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
50
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
140
How to call c# from c++ - meetup app osaka@10
harukasao
0
40
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
320
Coding Experience Cpp vs Csharp - meetup app osaka@9
harukasao
0
1.2k
Selected MAUI Blazor - meetup app osaka@8
harukasao
0
170
シミュレーター制作の感想/ Tried developing Simulator at .NET Lab 201910
harukasao
0
110
NimTorchの紹介 / Introduce NimTorch meetup app osaka @3
harukasao
0
910
std::optionalの使い方 / how to use optional nakamecpp_13
harukasao
0
2.7k
Other Decks in Programming
See All in Programming
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
550
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
200
Claspは野良GASの夢をみるか
takter00
0
200
AIで効率化できた業務・日常
ochtum
0
140
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
Agentic UI
manfredsteyer
PRO
0
170
並列実装の現場、2ヶ月間実務でAIを使い倒したAIもPCも私も限界が近い
ming_ayami
0
130
Webフレームワークの ベンチマークについて
yusukebe
0
170
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
250
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
140
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
210
3Dシーンの圧縮
fadis
1
780
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
420
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.7k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
Being A Developer After 40
akosma
91
590k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Marketing to machines
jonoalderson
1
5.5k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
The browser strikes back
jonoalderson
0
1.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
480
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