modules for c++ · scanner parser semantic analyzer optimizer code generator assembler token stream...
TRANSCRIPT
![Page 1: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/1.jpg)
C++Modules for
Daveed Vandevoorde
1
![Page 2: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/2.jpg)
C++Modules for
2
![Page 3: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/3.jpg)
C++
3
![Page 4: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/4.jpg)
C++
4
![Page 5: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/5.jpg)
C++ Libraries
5
![Page 6: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/6.jpg)
Libraries
6
![Page 7: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/7.jpg)
7
![Page 8: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/8.jpg)
export MyLib:public: typedef decltype(sizeof(1)) IndexType; ...private: int select(IndexType x) { ... }
import MyLib;
void select(IndexType x) { ...}
8
![Page 9: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/9.jpg)
export M1:public: typedef int I1;
import MM;I1 i1; // Okay.I2 i2; // Error. I2 is not declared.
export M2:public: typedef int I2;
export MM:public: import M1;private: import M2;
9
![Page 10: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/10.jpg)
export MyLib::Basics:public: namespace MyLib { typedef decltype(sizeof(1)) IndexType; ...
import MyLib::Basics;
void select(MyLib::IndexType x) { ...}
10
![Page 11: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/11.jpg)
export MyLib.basics:public: namespace MyLib { typedef decltype(sizeof(1)) IndexType;private: void helper() { ...
export MyLib.select: import MyLib.basics;public: namespace MyLib { void select(IndexType x) { ... helper(); ...
11
![Page 12: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/12.jpg)
export MyLib:public: struct S { void f(long x) { this->f((long long)x); } private: void f(long long x); }; void S::f(long long x) { ... }
import MyLib;
void g(S x) { x.f(42); // Unambiguous.}
12
![Page 13: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/13.jpg)
export MyLib:public: class B { virtual void f(); };
import MyLib;
struct D: B { override void f(); // Does find B::f!};
13
![Page 14: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/14.jpg)
export MyLib:private: import { extern ″C″ int printf(char const*, ...); }public: void warning(char const *msg) { printf(″%s″, msg); }
#ifndef MYLIB_H#define MYLIB_H
import MyLib;
#endif /* ifndef MYLIB_H */
14
![Page 15: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/15.jpg)
So what?
15
![Page 16: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/16.jpg)
Macros
16
![Page 17: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/17.jpg)
Macros
17
![Page 18: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/18.jpg)
Fast Builds
18
![Page 19: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/19.jpg)
Explicit Dependencies
19
![Page 20: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/20.jpg)
Initialization Order
20
![Page 21: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/21.jpg)
Cross-TU Optimizations
21
![Page 22: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/22.jpg)
22
![Page 23: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/23.jpg)
Scanner
Parser
Semantic Analyzer
Optimizer
Code Generator
Assembler
Token Stream
Parse Tree
IR
Optimized IR
Low-Level Code
Character Stream
Object Code
Front End
Back End
23
![Page 24: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/24.jpg)
Scanner
Parser
Semantic Analyzer
Optimizer
Code Generator
Assembler
Token Stream
Parse Tree
IR
Optimized IR
Low-Level Code
Character Stream
Object Code
Front End
Back End
module filesheader files
object files
24
![Page 25: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/25.jpg)
Scanner
Parser
Semantic Analyzer
Optimizer
Code Generator
Assembler
Token Stream
Parse Tree
IR
Optimized IR
Low-Level Code
Character Stream
Object Code
Front End
Back End
module files
header files
object files
25
![Page 26: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/26.jpg)
Scanner
Parser
Semantic Analyzer
Token Stream
Parse Tree
Character Stream
Front End
module files
header files
• Compiler dependent• Version dependent• Human readable?
26
![Page 27: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/27.jpg)
Scanner
Parser
Semantic Analyzer
Token Stream
Parse Tree
Character Stream
Front End
module files
• Compiler independent• Version independent• Human readable
precompiledmodules
27
![Page 28: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/28.jpg)
Modules
28
![Page 29: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/29.jpg)
Clang Modules
29
![Page 30: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/30.jpg)
.h.h
.h
.h
ModuleMap File(module.map)
precompiledmodules
#include ″lib_part.h″
void select(MyLib::IndexType x) { ...}
30
![Page 31: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/31.jpg)
// module.mapmodule std { module stdio { header ″stdio.h″ } module vector { require cplusplus header ″vector″ } ... explicit module iostream { require cplusplus header ″iostream″ export std.locale } ...}
31
![Page 32: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/32.jpg)
Strengths & Weaknesses
32
![Page 33: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/33.jpg)
Availability
33
![Page 34: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/34.jpg)
Ease of Transition
34
![Page 35: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/35.jpg)
Ease of Programming
35
![Page 36: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/36.jpg)
Visibility Control
36
![Page 37: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/37.jpg)
Initialization Ordering
37
![Page 38: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/38.jpg)
Cross-TU Properties
38
![Page 39: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/39.jpg)
Unifiable?
39
![Page 40: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/40.jpg)
// module.mapmodule std { module stdio { header ″stdio.h″ } module vector { require cplusplus header ″vector″ } ... explicit module iostream { require cplusplus header ″iostream″ export std.locale } ...}
40
![Page 41: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/41.jpg)
// std.mppexport [[mapincludes]] std: export [[macros]] .stdio {# include ″stdio.h″ } export [[cplusplus]] .vector {# include ″vector″ } ... export [[cplusplus, separate]] .iostream {# include ″iostream″ public: import std.locale; } ...}
41
![Page 42: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/42.jpg)
Want more?
42
![Page 43: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/43.jpg)
SG-2
43
![Page 44: Modules for C++ · Scanner Parser Semantic Analyzer Optimizer Code Generator Assembler Token Stream Parse Tree IR Optimized IR Low-Level Code Character Stream Object Code Front End](https://reader034.vdocument.in/reader034/viewer/2022052408/5f29bd0f24702f0003298926/html5/thumbnails/44.jpg)
ENDThe
44