Detail předmětu
Funkcionální a lifetime programování
FLP Ak. rok 2025/2026 letní semestr 5 kreditů
Praktické aplikace a širší úvod do lambda kalkulu v prostředí funkcionálních programovacích jazyků. Problematika vlastnictví dat a jejich doby života (lifetime) v kontextu programovacího jazyka rust. V rámci funkcionálního programování jsou diskutovány abstraktní datové typy, použití rekurze a indukce, práce se seznamy a nekonečnými datovými strukturami v jazyce Haskell. V rámci seznámení s jazykem rust se diskutuje problematika programování v prostředí jazyka s plně deterministickou a automatickou správou paměti.
Proč je předmět vyučován
Čistě deklarativní programovací jazyky jsou fenomén, který umožňuje získat na řadu problémů nový pohled a tak i získat nová, neotřelá řešení. Jazyk rust nabízí vysoký výkon a práci ve více vláknech při automatické správě paměti plně kompilovaného jazyka.
Podmínky zápočtu
Student musí během semestru získat alespoň 23 bodů ze 49 možných, krom toho musí získat
- alespoň 10 bodů z projektu a laboratoří na funkcionální programování (z 17 možných) a
- alespoň 10 bodů z projektu a laboratoří na programování v jazyku rust (z 17 možných).
Pokud bude odhaleno plagiátorství nebo nedovolená spolupráce na projektech, či u půlsemestrální zkoušky, zápočet nebude udělen a dále bude zváženo zahájení disciplinárního řízení.
Garant předmětu
Koordinátor předmětu
Jazyk výuky
Zakončení
Rozsah
- 26 hod. přednášky
- 12 hod. pc laboratoře
- 14 hod. projekty
Bodové hodnocení
- 51 bodů závěrečná zkouška (písemná část)
- 15 bodů půlsemestrální test (písemná část)
- 20 bodů laboratoře
- 14 bodů projekty
Zajišťuje ústav
Přednášející
Cvičící
Cíle předmětu
Zvládnutí principů funkcionálního programování a programovacího jazyka ruist jak prakticky tak i z pohledu formálních základů, které jsou při použití obou paradigmat využívány.
Studenti získají základní znalosti a praktické zkušenosti ve funkcionálním programování, což je významná kategorie deklarativního programování. Kromě toho obdrží základní informace o teoretických základech tohoto paradigmatu a způsobu implementace.
Užití a zvládnutí rekurze pro algoritmizaci.
Práce s dobou života data a principy vlastníka pro dosažení maximálního výkonu u kompilovaného programovacího jazyka s plně automatickou a deterministickou správou paměti.
Požadované prerekvizitní znalosti a dovednosti
Způsoby zpracování (analýza, vyhodnocení/interpretace/překlad) programovacích jazyků, základní pojmy a zkušenosti z programovacích jazyků a jejich užití.
Literatura studijní
- Podklady k přednáškám (slajdy, ukázky, ...)
- Thompson, S.: Haskell, The Craft of Functional Programming, ADDISON-WESLEY, 1999, ISBN 0-201-34275-8
- Jones, S.P.: Haskell 98 Language and Libraries, Cambridge University Press, 2003, p. 272, ISBN 0521826144
- Bieliková, M., Návrat, P.: Funkcionálne a logické programovanie, Vydavateĺstvo STU, Vazovova 5, Bratislava, 2000.
- Klabnik, S., Nichols, C., Krycho, C., et al: The Rust Programming Language, Online, 2025, dostupné z: https://doc.rust-lang.org/book/ . [citováno 2025-12-04]
Osnova přednášek
- Úvod do funkcionálního programování
- Lambda kalkul
- Programovací jazyk Haskell, úvod, práce se seznamy
- Uživatelské datové typy, typové třídy a pole v jazyce Haskell
- Vstupy/výstupy v jazyce Haskell - typové třídy IO a Monad
- Dokazování ve funkcionálním programování
- Denotační sémantika, implementace funkcionálních jazyků
- Rust, úvod, skrývání, složené datové typy
- Řízení toku výpočtu, vlastnictví
- Slices a další datové struktury
- Balíky, vestavené datové kolekce
- Chyby a generické typy
- Doba života (lifetime), diskuse, závěr
Osnova počítačových cvičení
- Haskell - základní rysy jazyka, rekurze, seznamy, částečná aplikace, funkce vyššího řádu (map, filter, foldX), ukázka práce s nekonečným seznamem, zkrácené vyhodnocování
- Haskell - datové typy, monády, vstup/výstup
- Haskell - demonstrační cvičení - konstrukce jednoduchého interpretru s pomocí knihovny Parsec
- Rust - cargo, skrývání, složené typy, tok řízení, slices
- Rust - datové struktury, balíky, vestavěné kolekce
- Rust - generické typy, doba života (lifetime)
Osnova ostatní - projekty, práce
- Jednoduchý program v jazyce Haskell (Hugs, GHC, GHCi).
- Jednoduchý program v jazyce Rust (cargo).
Průběžná kontrola studia
- Půlsemestrální zkouška, u které neexistuje náhradní, či opravný termín.
- Laboratoře - hodnotí se příprava na laboratoře a práce v laboratořích samotných
- Vypracování 2 projektů v průběhu semestru a jejich odevzdání ve stanoveném termínu.
- Půlsemestrální zkouška - písemná, formou otázek a úkolů, neexistuje náhradní/opravný termín - 15 bodů.
- Laboratoře - práce v laboratořích a příprava na laboratoře jsou hodnoceny na každých laboratočích, 10 bodů na každou část (FP a LP), tedy za všechny laboratoře 20 bodů.
- Vypracování projektů - 2 projekty, jeden ve funkcionálním programovacím jazyku a druhý v programovacím jazyku rust - jednoduché programy, dle zadání - 14 bodů celkem.
- Závěrečná zkouška - písemná, formou otázek a úkolů, 2 opravné termíny (51 bodů - pro získání bodů ze zkoušky je nutné zkoušku vypracovat tak, aby byla hodnocena nejméně 20 body, v opačném případě bude zkouška hodnocena 0 body, krom toho je třeba z každé tematické části λ-kalkul / Haskell / Rust získat alespoň 4 body).
Rozvrh
| Den | Typ | Týdny | Místn. | Od | Do | Kapacita | PSK | Skup | Info |
|---|---|---|---|---|---|---|---|---|---|
| Po | přednáška | 1., 2., 3., 4., 5., 6., 7., 8., 10., 11., 12., 13. výuky | E104 E105 E112 | 13:00 | 15:50 | 294 | 1MIT 2MIT | NBIO - NSPE NEMB xx | Kolář |
| Út | poč. lab | 2., 4., 6. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Út | poč. lab | 3., 5., 7. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Út | poč. lab | 8., 10., 12. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Hranický |
| Út | poč. lab | 9., 11., 13. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Hranický |
| Út | poč. lab | 2., 4., 6. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Út | poč. lab | 3., 5., 7. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Út | poč. lab | 8., 10., 12. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | Hranický |
| Út | poč. lab | 9., 11., 13. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | Hranický |
| Čt | poč. lab | 2., 4., 6. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Čt | poč. lab | 3., 5., 7. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Ondryáš |
| Čt | poč. lab | 8., 10., 12. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Bučko |
| Čt | poč. lab | 9., 11., 13. výuky | N204 N205 | 16:00 | 17:50 | 40 | 1MIT 2MIT | xx | Bučko |
| Čt | poč. lab *) | 2., 4., 6., 8., 10., 12. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx | |
| Čt | poč. lab *) | 3., 5., 7., 9., 11., 13. výuky | N204 N205 | 18:00 | 19:50 | 40 | 1MIT 2MIT | xx |
Zařazení předmětu ve studijních plánech