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++
    1. Nástroje pro větší čitelnost a spolehlivost
    2. Zlepšení výkonu a latence v embedded světě
    3. Nástroje C++20 a C++23, očekávání od C++26
  • Různá drobná vylepšení
    1. Formátovaný výstup a std::println
    2. Změny v inicializaci hodnot a proměnných
    3. Spaceship a strong či weak pořadí
  • Zajímavé specializované nástroje
    1. Více hodnot při indexování
    2. Počítání se std::lerp
    3. Endianess a byteswap
  • Práce s adresářovou strukturou
    1. Procházení adresářové struktury
    2. Zásahy do souborů a adresářů
    3. Interakce se zbytkem standardní knihovny
  • Práce s kusy polí a řetězců
    1. Souvislé sekvence a std::span
    2. Předávání řetězců a std::string_view
    3. Výhody a rizika pohledů do paměti
  • Vylepšení práce s kontejnery
    1. Mazání prvků pomocí std::erase
    2. Rozebírání přes structured bindings
    3. Opouštíme přímé používání iterátorů
  • Jak fungují ranges a views
    1. Vztah ranges, views a kontejnerů
    2. Co je špatně na iterátorech v C++
    3. Na co si dávat pozor u ranges
  • Nástroje pro filtrování a transformaci
    1. Views jako líné iterátory
    2. Řetězení operací nad views
    3. Jaké views máme k dispozici
  • Moderní práce s vlákny
    1. Futures a promises
    2. Práce s std::jthread
    3. Použití std::async
  • Asynchronní volání přes callbacky
    1. Předávání callbacků k událostem
    2. Skládání sekvencí callbacků
    3. Řešení přes korutiny
  • Korutiny a asynchronní I/O
    1. Motivace práce s korutinami
    2. Externí knihovny s plánovačem
    3. Potenciální dopady v embedded světě
  • Asynchronní síťová komunikace
    1. Komunikace pomocí TCP/IP
    2. HTTP server a klient
    3. Souběh s ostatními operacemi
  • Výpočetní vlákna a korutiny
    1. Korutiny mají řešit I/O
    2. CPU bound versus I/O bound
    3. Kombinace vláken a korutin
  • Šablony a jejich specializace
    1. Zvláštní zacházení s konkrétními případy
    2. Specializace pomocí tagování a policy
    3. Metafunkce a výpočty v době kompilace
  • Vymezení typových parametrů
    1. Dokumentace požadavků na typy
    2. SFINAE a programování pomocí type traits
    3. Explicitní vymezení a concepts
  • Pohodlnější práce s šablonami
    1. Zkrácené šablony funkcí
    2. Deducing this a perfect forwarding
    3. CTAD a vynechávání typových parametrů
  • Kombinace OOP a šablon
    1. Využití dědičnosti bez virtuálních metod
    2. Doplňování funkcionality pomocí CRTP
    3. Vymazání typů a std::any
  • Knihovny v hlavičkových souborech
    1. Moderní význam keywordu inline
    2. ODR a jak to všechno funguje
    3. Kombinace se šablonami a třídami
  • Metaprogramování mimo šablony
    1. Klíčová slova constexpr, consteval a constinit
    2. Podmínky if constexpr a if consteval
    3. Použití static_assert()
  • Kombinace constexpr a šablon
    1. Větvení podle typu v době kompilace
    2. Zásadní zjednodušení některých šablon
    3. Šablony constexpr funkcí a proměnných
  • Modularita
    1. Hlavičkové soubory a #pragma once
    2. Vlastní moduly a úprava ODR
    3. Standardní knihovna ve formě modulu
  • Lambdy a jejich vylepšení
    1. Implicitní a explicitní šablony
    2. Lambdy s constexpr a consteval
    3. Implicitní chování bezstavové lambdy
  • Řízení chyb bez použití výjimek
    1. Návratová hodnota std::expected
    2. Práce se std::optional
    3. Řetězení monadických operací
  • Běhový polymorfismus bez heapu
    1. Polymorfní typ std::variant
    2. Aplikace overloadů přes ‘std::visit’
    3. 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.)