Gabriel Dos Reis
<h1>existing practice and Challenges</h1>
- build time scalability of idiomatic C++
Fragile and Outdated Linking Mode
Program = collection of independently translated source files
Macros are a big problem
Modules accepted for C++20
What did we accomplish
- Languate notions and constructs
- Componentization
- Isolation
- Build throughput
- Semantics-aware developer tools
- With transition paths
- Global module fragments
- Header units
Module Definition (101)
export module BasicPlane.Figures; export struct X ... #include <iostream> import BasicPlane.Figures;
How does it work?
- The generated module generates .o plus metadata
- If name is not exported it is not available
Efficient Pimpl
- module :private;
Spreading Module Definition
- “export module” gives module definition
- “module X” is implementation
Spreading Module Interface
- Primary module interface
export module BasicPlane.Figures; export import :PointPart; export import :RectPart;
export module BasicPlane.Figures:PointPart; export struct Point {...}; export module BasicPlane.Figures:RectPart; import :PointPart; export struct Rectangle {...}; export int width(const Rectangle &); ...
Module Aggregation
export module BasicPlane; export import BasicPlane.Figures; export import BasicPlane.Transformations; export import BasicPlane.Canvas;
Transitioning into modular world, and preparing for modules
module; #include <sys/stat.h> export module System.File.Ops; namespace Sys { export stat stat_dierctory(const char *); export using ::chmod; }
Heder Unit: An almost module
import <iostream> import BasicPlane.Figures;
Kicking the Tires with MSVC, GCC, and clang
gcc.gnu.org/wiki/cxx-modules
Questions
- Does
import <iostream>
obsolete pre-compiled headers? Yes
- PCH vs usual include. 10 times faster