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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
150
C# and C++ Interoperability - cho-dotnetnew
harukasao
0
640
How to call c# from c++ - meetup app osaka@10
harukasao
0
65
VCpp Link and Library - C++ breaktime 2025 Summer
harukasao
0
340
Coding Experience Cpp vs Csharp - meetup app osaka@9
harukasao
0
1.3k
Selected MAUI Blazor - meetup app osaka@8
harukasao
0
190
シミュレーター制作の感想/ 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
When benchmarks go bad - what I learned from measuring performance wrong
hollycummins
0
220
UnityでSystem.Net.WebSocketsなWebSocketサーバが動かないのでUnity Monoのコードを覗いてみた / about implementing websocket server with unity mono
drumath2237
1
600
Agentic Software Factoryに、すごく賢いIF文を。 / super smart IF statement into the Agentic Software Factory.
rkaga
8
2.2k
コードで差別化できない時代の ソフトウェアエンジニアリング / Software Engineering in an Era Where Code Doesn’t Differentiate
kishida
2
170
Verilogで学ぶCPU自作入門
uyuki234
8
4.1k
Compiling a real-world CLI tool to native with Static Hermes
tmikov2023
0
110
AWSに止められる覚悟してますか?
morizo_1984
2
530
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
360
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
1k
[ハンズオン]AIへの指示だけで「五目並べ」を作ってみよう
satoshi256kbyte
1
380
AIに “答え“を書かせるのを やめてみた
___akari11
0
120
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
Featured
See All Featured
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
560
[RailsConf 2023] Rails as a piece of cake
palkan
59
7.1k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
270
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
480
We Are The Robots
honzajavorek
0
400
HDC tutorial
michielstock
2
960
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
2
2.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.9k
Marketing to machines
jonoalderson
1
5.9k
30 Presentation Tips
portentint
PRO
1
430
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
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