Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Try C++ module! - meetup app osaka@5
Search
Akiko Kawai
January 29, 2021
Programming
520
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
140
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
610
How to call c# from c++ - meetup app osaka@10
harukasao
0
62
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
180
シミュレーター制作の感想/ Tried developing Simulator at .NET Lab 201910
harukasao
0
130
NimTorchの紹介 / Introduce NimTorch meetup app osaka @3
harukasao
0
930
std::optionalの使い方 / how to use optional nakamecpp_13
harukasao
0
2.7k
Other Decks in Programming
See All in Programming
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
310
MVNOの申込からeSIM開通までをiOSアプリでつなぐ- 本人確認・MNP・通信事業者基盤をまたぐ実装
satotakeshi
0
490
海上で動くGoサーバー: goroutineとchannelでさばく航行データストリーム
atsuki_seo
0
970
JRuby: Past, Present, and Future
headius
0
210
パズルゲームの作り方 / how to make puzzle games
kaityo256
PRO
2
240
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
450
アクセシビリティから考える情報設計
high_g_engineer
0
420
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
440
Heart of Swift Concurrency
koher
0
1k
技術的負債を組織課題として解く-増えすぎたマイクロサービスとの戦い-
reimaru
1
2.4k
Java 27新機能 / Java 27 new features
kishida
2
180
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
840
Featured
See All Featured
Discover your Explorer Soul
emna__ayadi
2
1.3k
Principles of Awesome APIs and How to Build Them.
keavy
128
18k
Everyday Curiosity
cassininazir
0
330
New Earth Scene 8
popppiees
4
2.6k
Designing Powerful Visuals for Engaging Learning
tmiket
1
580
Building Adaptive Systems
keathley
44
3.2k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Typedesign – Prime Four
hannesfritz
42
3.2k
How to Think Like a Performance Engineer
csswizardry
28
2.8k
Facilitating Awesome Meetings
lara
57
7.1k
Agile that works and the tools we love
rasmusluckow
331
22k
Docker and Python
trallard
47
4.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