NPRG051 - Pokročilé programování v C++

Formát předmětu

Česká verze přednášek je vedena obvyklým způsobem, během semestru se vystřídají tři přednášející.

Cvičení se budou konat v sudých týdnech, ve 4./8./12. týdnu budou zadány domácí úkoly.

Známky, zápočty a zkouška

Zápočet je udělován za včasné a správné vypracování domácích úkolů zadávaných během semestru (at least 5 points from each assignment, and at least 20 points in total).

Všechny domácí úkoly musí psát výhradně student, který je odevzdává, samostatně a bez použití nástrojů AI. Můžete diskutovat o designu a souvisejících problémech se svými kolegy; kód však musíte napsat samostatně a nesmíte jej s nikým sdílet.

Splnění podmínek pro získání zápočtu je podmínkou pro připuštění ke zkoušce.

Zkouška se skládá z praktického testu a následné ústní diskuse o praktickém testu, domácích úkolech a souvisejících oblastech. Ústní část zkoušky může být vypuštěna v případě jasného výsledku praktické části.

Předběžný plán přednášky, slajdy a další materiály

David Bednárek     Tomáš Faltín     Filip Zavoral
Středa
15:40
PřednáškySlajdyDalší materiály
18.2.-11.3. + 20.5. Introduction Learning C++
Exceptions
Utilities tuple
iteration through variadic lists
Concepts requirements, concepts
Templates standard library traits and tags
lvalue/rvalue, perfect forwarding variadic templates
universal references, forwarding
Metaprogramming in C++ metaprogramming
tagged indexes
18.3.-8.4. Type deduction auto, structure bindings, deduction rules structured bindings   type deduction   C++20
Type deduction deduction rules, CTAD, uniform initialization CTAD   initialization  
Type system type compatibility, type erasure, any, variant, visit, overload type erasure   overload   variant
Libraries ranges, span, ud literals, ..., C++23 & beyond ranges   chrono  
15.4.-6.5. Parallel programming introduction, race condition, std::thread, std::jthread C++11 concurrency
parallel algorithms, tasks, concurrency, parallel algorithms again
C++11 parallelism, C++11 concurrency again
Parallel programming synchronization primitives: mutex, condition variable, ... some scary reading: BAD, UGLY, and GOOD
Parallel programming high-level primitives: futures, parallel algorithms, memory model (quick), atomics
Parallel programming atomics, ABA problem, coroutines

Exploring C++20 Coroutines, Coroutines introduction, C++20 coroutines tutorial
13.5. ⚠️Rektorský den - výuka zrušena
20.5. Advanced topics Tagged indices
Practicals HW1 Feedback, coroutines Simple fibonacci, Await example, New thread in coroutine,
Fibonnaci with own generator, Alphabet generator, std::future as coroutine type
Doplňkové slajdy
Related winter-term lectures (NPRG041) std::variant.
Extended versions of winter-term lectures
(NPRG041)
declarations-definitions
templates
Design patterns Visitor.
Very advanced topics mixin
Metaprogramming in C++ sfinae
Modules modules