Youtube - C++ Modules Getting Started Today - Andreas Weis - CppCon 2023
C++ Modules: Getting Started Today - Andreas Weis - CppCon 2023
https://www.youtube.com/watch?v=_x9K9_q2ZXE
Transcrição
06:47
Motivação
06:20
Módulos
06:37
exemplo de programa Alo mundo

07:00
- Independência entre nome do módulo e nome do arquivo
// File: module.cpp
export module my_module;
export char const* my_function()
{
return "Hello Modules";
}
//*ile: main.cpp
#include <print>
import my_module
int main()
{
std::println("{}", my_funcion() );
}
07:47
Nomes de módulos precisam ser únicos por todo o programa
08:06
Módulos não possuem necessidade de usar namespaces. Embora seja boa prática.

08:34
Uma importante diferença entre headers pré-compilador é que no caso de módulos nós precisamos explicitar tudo o que desejamos tornar disponível para nossos clientes explicitamente com export.
08:47
Podemos exportar:
- Funções
- Tipos
- Template de classe e funções
10:18
- namespaces, mas se for abrir novamente o mesmo namespace em outro lugar, será necessário declarar novamente export

10:53
- using declaration

11:39
- Blocos export
12:21
- Módulo inteiro pode ser exportado
13:03
Mesmo não usando export, isso não significa que uma classe estará completamente inacessível
Quando não exportamos algo, o que somos impedidos é de referenciar a estrutura através de um nome.

15:00
#recommended Daniela Engert - The three secret spices of C++ Modules - Visibility, Reachability, Linkage
15:26
Primary Module Interface Unit
// File: my_module.cpp
export module my_module;
export char const * my_function()
{
return "Hello Modules!";
}
19:03
Module Interface partitions

22:02

#recommended talk about header units, not good idea to use in production
22:58

23:40
Building modules with CMake - old School

cmake_minimum_required(VERSION 3.27)
project(my.project)
add.executable(my.executable) target.sources(my.executable PUBLIC {PR0JECT.SOURCE.DIR}/inc/my.headerl.hpp {PROJECT_SOURCE_DIR}/inc )
Building with CMake since v3.23
25:03

cmake.minimum.required(VERSION 3.27) project(my.proj ect)
add.executable(my.executable)
target.sources(my.executable PUBLIC
{PR0JECT.SOURCE.DIR}/inc
FILES
{PROJECT.SOURCE.DIR}/inc/my.header2.hpp
)
26:04

26:37

27:25

Module File Extensions
30:05

#error-prone #best-practices Não use estas extensões de módulos para arquivos regulares, porque o compilador pode aplicar o build errado e gerar um erro de compilação.
31:23

31:49

33:57

34:38

35:46

36:02

38:25

Advices && Pitfalls
41:23

standard library
Quando a biblioteca padrão não usar módulos
41:55

Coloque entre esses dois fragmentos de código (module) os includes
44:13

44:39

46:39

#best-practices Quando misturar includes com módulos no mesmo arquivo, sempre colocar includes primeiro
48:17


Macros não são exportadas em módulos

Workaround para macros
52:28

53:19

54:09

56:39

#recommended Where to go from here...
- Luis Caro Campos - C++-20 Modules: The Packaging and Binary Redistribution Story (CppCon 2023, right afterwards in Cottonwood) m
- Daniela Engert - Modules: The Beginner's Guide (Meeting C++ 2019)
- Daniela Engert - A Short Tour of C++ Modules (CppCon 2021)
- Bill Hoffman - import CMake: 2023 State of C++20 modules in CMake (CppNow 2023)
- Bret Brown - Modern CMake Modules (CppCon 2021) m vector-of-bool - Understanding C++ Modules (Blog post series)
- Boeckel, King, Maynard, Hoffman - How CMake supports Fortran modules and its applicability to C++ (WG21 D1483)