Functional Programming in C++
A tantárgyleírás hatályossága
| Subject name (Hungarian, English) |
Funkcionális programozás C++-ban
Functional Programming in C++
|
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Subject code | BMEVITMAV47 | ||||||||||||
| Subject type | — | ||||||||||||
| Training Level | — | ||||||||||||
| Course types and hours (weekly/semester) |
|
||||||||||||
| Assessment type | félévközi érdemjegy | ||||||||||||
| Credits | 2 | ||||||||||||
| Subject coordinator |
Varga PálMarosi Gyula
contact:
nemeth.gabor@vik.bme.hu
|
||||||||||||
| Responsible department |
Távközlési és Mesterséges Intelligencia Tanszék
|
||||||||||||
| Faculty | Villamosmérnöki és Informatikai Kar | ||||||||||||
| Subject website | — | ||||||||||||
| Primary curriculum type | — | ||||||||||||
| Direct prerequisites – Strong prerequisite | none | ||||||||||||
| Direct prerequisites – Weak prerequisite | none | ||||||||||||
| Direct prerequisites – Parallel prerequisite | none | ||||||||||||
| Direct prerequisites – Milestone prerequisite | none | ||||||||||||
| Direct prerequisites – Exclusion | none |
Objectives
1.
hét
Bevezetés; a megközelítés motivációja.
A move szemantika és a tökéletes továbbítás. Az lvalue és rvalue referenciák. A move szemantika bemutatása, a std::move és a std::move_if_noexcept alkalmazása. Sablonok. A tökéletes továbbítás és a std::forward. Copy elision, RVO.
Laborfeladat: A move szemantika és a tökéletes továbbítás gyakorlása.
Osztály sablonparaméterének a dedukciójának vizsgálata.
2. hét
Variadikus sablonok. Variadikus sablonparaméterek feldolgozása fordítási idejű rekurzióval. Fold kifejezések (fold expression). Fordítási idejű döntés: constexpr if, template specializáció, tag dispatching, SFINAE.
Laborfeladat: Típusbiztos printf. Fordítási idejű rekurzió.
3. hét
Lambda-kalkulus I. Megismerkedés az első funkcionális programnyelvnek is tekinthető lambda kalkulussal. A magasabb rendű függvények fogalma és a körrizés. λ-kifejezések gráfja. λ-kifejezések átalakítási szabályai: a β- és az α-konverzió.
Laborfeladat: Konverziók gyakorlása.
4. hét
Lambda-kalkulus II. A λ-kifejezések legegyszerűbb alakra hozása. Normálforma. Redukálási stratégiák és a lusta paraméterkiértékelés. Elsőrendű típusos λ-kalkulus.
Laborfeladat: Redukálási stratégiák összehasonlítása.
5. hét
Funkcionális programozás C++-ban.
Függvényobjektumok és lambda kifejezések írása és összehasonlítása. STL algoritmusok
(a
Laborfeladat: Algoritmikus problémák megoldása az STL segítségével
funkcionális szempontból.
6. hét
Kategóriaelméleti bevezető (morfizmus, objektumok, funktorok, kompozíció, algebrai adattípusok). Tiszta függvények (pure functions). Változó állapotok elkerülése. Funktorok és Monádok. A std::optional vizsgálata funkcionális szempontból.
Laborfeladat: Monádok (pl. maybe monád) implementálása C++-ban.
7. hét
Algebrai adattípusok, ezek megvalósítása és használata C++-ban. A std::variant és a std::tuple.
Laborfeladat: A std::apply és a std::visit használata. Type matching inline visitor írása.
8. hét
Magasabb rendű függvények használata C++-ban. Tail recursion. Folding és lifting. A std::invoke.
Laborfeladat: Magasabb rendű függvények implementálása.
Lusta kiértékelés implementálása C++-ban. Memoization.
Laborfeladat: Cache készítése függvény kiszámolt értékeinek tárolására.
10. hét
A range-ek használata C++-ban, kapcsolatuk a lusta kiértékeléssel. Range adapterek és a | operátor.
Laborfeladat: Range-ek, view-k. Algoritmusok
írása range-ek felhasználásával.
11.hét
Funkcionális és imperatív adatstruktúrák összehasonlítása és vizsgálata (algoritmusok és ezek aszimptotikus komplexitása). Perzisztens lista. Copy on Write.
Laborfeladat: Perzisztens lista implementálása C++-ban.
12.hét
Párhuzamosság és funkcionális programozás: párhuzamos végrehajtás modelljei, párhuzamosság által elérhető gyorsulás elvi határa, Amdahl törvénye, szál alapú vs. opcionális párhuzamosság, taszk alapú (run-to-completion) párhuzamosság, Reaktív programozás es reaktív stream-ek, Actor modell.
Laborfeladat: Korábbi laborgyakorlatokon elkészült funkcionális
komponensek párhuzamosítása, távközlési alkalmazás implementálása Actor modell szerint.
13. hét
C++ szoftver tesztelése, tesztelési keretrendszerek ismertetese. Fuzz-testing. Szoftverteljesítmény mérése, teljesítményvezérelt optimalizáció.
Laborfeladat: Catch unit-test rendszer használata, tesztek írása korábbi alkalmakon elkészült kódokhoz. Teljesítmény mérése a “perf” vagy “vsperf” használatával, teljesítménymérés eredményének a feldolgozása, értelmezése. Coverage alapú elemzés és Fuzz-testing a libAFL használatával.
14. hét
Programozási paradigmák összehasonlítása. Funkcionális és imperatív gondolkodás. Funkcionális programozás és OOP, valamint ezek kombinált alkalmazása.
Laborfeladat: Gyakorlati feladat - ellenőrző mérésLearning outcomes
Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:
Knowledge
No learning outcomes recorded.
Skills
No learning outcomes recorded.
Attitudes
No learning outcomes recorded.
Autonomy and responsibility
No learning outcomes recorded.
Oktatási módszertan
Tanulástámogató anyagok
Not provided.
Recommended preliminary knowledge for completing the subject
General rules
Assessment methods
In-term assessments
No detailed assessments provided.
Weight of in-term assessments
No weights provided.
Exam-period assessments
No detailed assessments provided.
Weight of exam elements
No weights provided.
Grade calculation
No grade thresholds provided.
Attendance requirements
No attendance requirements provided.
Rules for retake and resubmission
Not provided.
Short description
Not provided.
Detailed description
Recommended courses
Workload to complete the subject
No workload breakdown provided.
Validity of subject requirements
Curriculum placement
No curriculum placements recorded for this subject version.