C++ nové generace – efektivní a bezpečný kód s C++ 20/23/26 (CPP6)
Programování, C, C++
Moderní C++ přináší obrovský posun v možnostech, jak psát efektivní, elegantní a čitelný kód. V tomto kurzu začneme od představení příjemných drobností a postupně se dostaneme k zásadnějším změnám. Od změny přístupu k datovým strukturám přes novinky v paralelním a asychronním programování přes práci se šablonami a koncepty a výpočty v době kompilace až po modularitu a optimalizaci především embedded software do prostředí citlivé na latence.
Součástí kurzu je řada cvičení zaměřených na refaktoring staršího kódu do moderní podoby a porovnání přínosu jednotlivých přístupů. Kurz je zaměřený především na zkušené vývojáře, kteří chtějí zefektivnit a zpřehlednit svůj kód, osvojit si moderní idiomy a přejít od klasického C++ k modernímu stylu psaní.
TOTO ŠKOLENÍ VÁM POMŮŽE:
- Osvojit si nové idiomy C++20/23 a připravit se na C++26
- Zefektivnit a zjednodušit kód pomocí
ranges, views a std::span
- Zlepšit bezpečnost a robustnost kódu pomocí
concepts, std::expected a constexpr
- Optimalizovat výkon a latenci pro embedded a výkonnostně citlivé aplikace
- Navrhovat a testovat asynchronní a souběžné řešení s
korutinami, jthread a futures
- Refaktorovat starší kód na moderní šablony, modularitu a bezalokovací
polymorfismus
KDO BY SE MĚL KURZU ZÚČASTNIT?
- Zkušení C++ vývojáři
- Vývojáři embedded systémů
- Výkonní a systémoví inženýři
- Backendoví a síťoví vývojáři
- Architekti softwaru a technickí vedoucí
KDE A KDY KURZ PROBÍHÁ?
Kontaktujte nás
S námi
máte na výběr: Přijďte na
kurz osobně do naší učebny, nebo se ke kurzu
připojte online. Pokud preferujete online formu, uveďte prosím do poznámky v objednávce "Připojím se virtuálně".
Více informací k hybridní formě školení
naleznete zde.
Náplň kurzu:
Skrýt detaily
-
Co přináší nové verze C++
-
Nástroje pro větší čitelnost a spolehlivost
-
Zlepšení výkonu a latence v embedded světě
-
Nástroje C++20 a C++23, očekávání od C++26
-
Různá drobná vylepšení
-
Formátovaný výstup a
std::println
-
Změny v inicializaci hodnot a proměnných
-
Spaceship a strong či weak pořadí
-
Zajímavé specializované nástroje
-
Více hodnot při indexování
-
Počítání se
std::lerp
-
Endianess a byteswap
-
Práce s adresářovou strukturou
-
Procházení adresářové struktury
-
Zásahy do souborů a adresářů
-
Interakce se zbytkem standardní knihovny
-
Práce s kusy polí a řetězců
-
Souvislé sekvence a
std::span
-
Předávání řetězců a
std::string_view
-
Výhody a rizika pohledů do paměti
-
Vylepšení práce s kontejnery
-
Mazání prvků pomocí
std::erase
-
Rozebírání přes structured bindings
-
Opouštíme přímé používání iterátorů
-
Jak fungují ranges a views
-
Vztah ranges, views a kontejnerů
-
Co je špatně na iterátorech v C++
-
Na co si dávat pozor u ranges
-
Nástroje pro filtrování a transformaci
-
Views jako líné iterátory
-
Řetězení operací nad views
-
Jaké views máme k dispozici
-
Moderní práce s vlákny
-
Futures a promises
-
Práce s
std::jthread
-
Použití
std::async
-
Asynchronní volání přes callbacky
-
Předávání callbacků k událostem
-
Skládání sekvencí callbacků
-
Řešení přes korutiny
-
Korutiny a asynchronní I/O
-
Motivace práce s korutinami
-
Externí knihovny s plánovačem
-
Potenciální dopady v embedded světě
-
Asynchronní síťová komunikace
-
Komunikace pomocí TCP/IP
-
HTTP server a klient
-
Souběh s ostatními operacemi
-
Výpočetní vlákna a korutiny
-
Korutiny mají řešit I/O
-
CPU bound versus I/O bound
-
Kombinace vláken a korutin
-
Šablony a jejich specializace
-
Zvláštní zacházení s konkrétními případy
-
Specializace pomocí tagování a policy
-
Metafunkce a výpočty v době kompilace
-
Vymezení typových parametrů
-
Dokumentace požadavků na typy
-
SFINAE a programování pomocí type traits
-
Explicitní vymezení a concepts
-
Pohodlnější práce s šablonami
-
Zkrácené šablony funkcí
-
Deducing this a perfect forwarding
-
CTAD a vynechávání typových parametrů
-
Kombinace OOP a šablon
-
Využití dědičnosti bez virtuálních metod
-
Doplňování funkcionality pomocí CRTP
-
Vymazání typů a
std::any
-
Knihovny v hlavičkových souborech
-
Moderní význam keywordu inline
-
ODR a jak to všechno funguje
-
Kombinace se šablonami a třídami
-
Metaprogramování mimo šablony
-
Klíčová slova
constexpr, consteval a constinit
-
Podmínky
if constexpr a if consteval
-
Použití
static_assert()
-
Kombinace constexpr a šablon
-
Větvení podle typu v době kompilace
-
Zásadní zjednodušení některých šablon
-
Šablony constexpr funkcí a proměnných
-
Modularita
-
Hlavičkové soubory a
#pragma once
-
Vlastní moduly a úprava ODR
-
Standardní knihovna ve formě modulu
-
Lambdy a jejich vylepšení
-
Implicitní a explicitní šablony
-
Lambdy s
constexpr a consteval
-
Implicitní chování bezstavové lambdy
-
Řízení chyb bez použití výjimek
-
Návratová hodnota
std::expected
-
Práce se
std::optional
-
Řetězení monadických operací
-
Běhový polymorfismus bez heapu
-
Polymorfní typ
std::variant
-
Aplikace overloadů přes
‘std::visit’
-
Od lambda šablon k overloaded pattern
-
Předpokládané znalosti:
-
Znalost jazyka C++.
-
Doporučený předchozí kurz:
-
C++ – Pokročilé programování (CPP2)
-
Doporučený následný kurz:
-
C++ – Návrhové vzory (CPP3)
-
Časový rozvrh:
-
5 dní (9:00hod. - 17:00hod.)