Funkcionális programozás C++-ban
A tantárgyleírás hatályossága
| Tantárgy neve (magyarul, angolul) |
Funkcionális programozás C++-ban
Functional Programming in C++
|
||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tantárgykód | BMEVITMAV47 | ||||||||||||
| Tantárgyjelleg | — | ||||||||||||
| Képzési szint | — | ||||||||||||
| Kurzustípusok és óraszámok (heti/féléves) |
|
||||||||||||
| Tanulmányi teljesítmény/értékelés típusa | félévközi érdemjegy | ||||||||||||
| Tantárgy kreditértéke | 2 | ||||||||||||
| Tantárgyfelelős |
Varga PálMarosi Gyula
elérhetőség:
nemeth.gabor@vik.bme.hu
|
||||||||||||
| Tantárgyat gondozó oktatási szervezeti egység |
Távközlési és Mesterséges Intelligencia Tanszék
|
||||||||||||
| Kar | Villamosmérnöki és Informatikai Kar | ||||||||||||
| Tantárgy weboldala | — | ||||||||||||
| Tantárgy elsődleges mintatantervi jellege | — | ||||||||||||
| Közvetlen előkövetelmények – Erős előkövetelmény | nincs | ||||||||||||
| Közvetlen előkövetelmények – Gyenge előkövetelmény | nincs | ||||||||||||
| Közvetlen előkövetelmények – Párhuzamos előkövetelmény | nincs | ||||||||||||
| Közvetlen előkövetelmények – Mérföldkő előkövetelmény | nincs | ||||||||||||
| Közvetlen előkövetelmények – Kizáró feltétel | nincs |
Célkitűzés
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ésTanulmányi eredmények
Ez a tantárgy a KKK rendeletben meghatározott, következő kompetenciák fejlesztését szolgálja:
Tudás
Nincsenek rögzített tanulási eredmények.
Képességek
Nincsenek rögzített tanulási eredmények.
Attitűd
Nincsenek rögzített tanulási eredmények.
Autonómia és felelősség
Nincsenek rögzített tanulási eredmények.
Oktatási módszertan
Tanulástámogató anyagok
Online források
A tantárgy teljesítéséhez ajánlott előzetes ismeretek
Általános szabályok
Teljesítményértékelési módszerek
Szorgalmi időszakban végzett teljesítményértékelések részletes leírása
Nincs megadva részletes értékelés.
Szorgalmi időszakban végzett teljesítményértékelések részaránya
Nincs megadva részarány.
Vizsgaidőszakban végzett teljesítményértékelések részletes leírása
Nincs megadva részletes értékelés.
Vizsgarészek részaránya
Nincs megadva részarány.
Érdemjegy megállapítása
Nincs megadva érdemjegy határ.
Jelenléti és részvételi követelmények
Nincs megadva jelenléti követelmény.
Javítás, ismétlés és pótlás különös szabályai
Nincs megadva.
Rövid leírás
Nincs megadva.
Részletes leírás
Ajánlott tantárgyak
A tantárgy elvégzéséhez szükséges tanulmányi munka
Nincs megadva munkaidő bontás.
Tantárgykövetelmények hatályossága
Tantervi elhelyezés
Nincsenek rögzített tantervi elhelyezések ehhez a tárgyverzióhoz.