Efektivní programování v C++
Kód | Zakončení | Kredity | Rozsah | Jazyk výuky |
---|---|---|---|---|
NI-EPC | Z,ZK | 5 | 2P+1C | česky |
- Garant předmětu:
- Daniel Langr
- Přednášející:
- Daniel Langr
- Cvičící:
- Daniel Langr
- Předmět zajišťuje:
- katedra počítačových systémů
- Anotace:
-
Studenti se naučí využívat moderní rysy současných verzí jazyka C++ pro tvorbu softwaru. Důraz je kladen především na efektivitu, a to jak v podobě tvorby udržovatelných a přenositelných zdrojových kódů, tak v podobě korektních programů s nízkými nároky na paměť a procesorový čas.
- Požadavky:
-
Velmi dobré znalosti látky z předmětů BI-PA1 a BI-PA2, částečné znalosti látky z předmětů BI-SAP a BI-OSY. U BI-PA2 je rovněž doporučena znalost z „rozšiřujících materiálů“.
- Osnova přednášek:
-
1. Úvod, pozorovatelné chování, pravidlo as-if, optimalizace, jednotky překladu, ABI
2. Jednotky překladu a pozorovatelné chování, ODR, interní linkage, inline, statické a dynamické spojování, PIMPL
3. Nedefinované chování, doba života objektů, statická a dynamická alokace uložiště, inicializace a destrukce
4. Cena dynamických alokací, zarovnání, padding, placement new, vlastnící objekty
5. Technika Small string optimization
6. Výrazy new[] a delete[], obsah objektů, vektorová třída
7. Kategorie hodnot, typy referencí, navazování referencí, std::move
8. Emplace sémantika, perfect forwarding, dispatching
9. Šablony, instanciace šablon, dedukce argumentů šablon, specializace šablon, variadické šablony, template parameter pack
10. Function parameter pack, koncepty a omezení (constraints), SFINAE
11. Bezpečnost výjimek, alokátory, small buffer optimization, empty base optimization, type erasure
12. Type erasure, std::function, std::any, std::variant, CRTP, ADL
- Osnova cvičení:
-
Na počítačových cvičeních řeší studenti úlohy navazující na přednášky; cvičící poskytuje konzultace a rady.
- Cíle studia:
-
Cílem předmětu je naučit studenty využívat současné verze jazyka C++ tak, aby v něm byli schopni vytvářet efektivní, korektní, udržovatelný a přenositelný software.
- Studijní materiály:
-
Josuttis, The C++ Standard Library-A Tutorial and Reference
Meyers, Effective Modern C++
Prata, C++ Primer Plus
Reddy, API Design for C++
Stroustrup, Programming - Principles and Practice Using C++
Stroustrup, The C++ Programming Language
Sutter and Alexandrescu, C++ Coding Standards: 101 Rules, Guidelines, and Best Practices
Vandervoorde and Josuttis, C++ Templates - The Complete Guide
Williams, C++ Concurrency in Action
cppreference.com, www.cplusplus.com (C++ reference)
stackoverflow.com (developer forum)
isocpp.org (news, status, blogs, FAQs, discussion)
ISO/IEC 14882:2014 Information technology - Programming languages-C++
- Poznámka:
- Další informace:
- https://courses.fit.cvut.cz/NI-EPC/
- Rozvrh na zimní semestr 2024/2025:
- Rozvrh není připraven
- Rozvrh na letní semestr 2024/2025:
- Rozvrh není připraven
- Předmět je součástí následujících studijních plánů:
-
- Mgr. specializace Teoretická informatika, 2018-2019 (volitelný předmět)
- Mgr. specializace Počítačová bezpečnost, 2020 (volitelný předmět)
- Mgr. specializace Návrh a programování vestavných systémů, 2020 (volitelný předmět)
- Mgr. specializace Počítačové systémy a sítě, 2020 (PS)
- Mgr. specializace Manažerská informatika, 2020 (volitelný předmět)
- Mgr. specializace Softwarové inženýrství, 2020 (volitelný předmět)
- Mgr. specializace Systémové programování, verze od 2020 (PS)
- Mgr. specializace Webové inženýrství, 2020 (volitelný předmět)
- Mgr. specializace Znalostní inženýrství, 2020 (volitelný předmět)
- Mgr. specializace Teoretická informatika, 2020 (volitelný předmět)
- Mgr. program, pro fázi studia bez specializace, ver. pro roky 2020 a vyšší (VO)
- Master Specialization Digital Business Engineering, 2023 (VO)
- Mgr. specializace Systémové programování, verze od 2023 (PS)
- Mgr. specializace Teoretická informatika, 2023 (volitelný předmět)