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ň 20 bodů ze 40 možných, krom toho musí získat

  • alespoň 4 body z projektu na funkcionální programování (z 12 možných) a
  • alespoň 3 body z projektu na programování v jazyku rust (z 8 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

čeština

Zakončení

zápočet+zkouška (písemná)

Rozsah

  • 26 hod. přednášky
  • 12 hod. pc laboratoře
  • 14 hod. projekty

Bodové hodnocení

  • 60 bodů závěrečná zkouška (písemná část)
  • 20 bodů půlsemestrální test (písemná část)
  • 20 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

  1. Úvod do funkcionálního programování
  2. Lambda kalkul
  3. Programovací jazyk Haskell, úvod, práce se seznamy
  4. Uživatelské datové typy, typové třídy a pole v jazyce Haskell
  5. Vstupy/výstupy v jazyce Haskell - typové třídy IO a Monad
  6. Dokazování ve funkcionálním programování
  7. Denotační sémantika, implementace funkcionálních jazyků
  8. Rust, úvod, skrývání, složené datové typy
  9. Řízení toku výpočtu, vlastnictví
  10. Slices a další datové struktury
  11. Balíky, vestavené datové kolekce
  12. Chyby a generické typy
  13. Doba života (lifetime), diskuse, závěr

Osnova počítačových cvičení

  1. 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í
  2. Haskell - datové typy, monády, vstup/výstup
  3. Haskell - demonstrační cvičení - konstrukce jednoduchého interpretru s pomocí knihovny Parsec
  4. Rust - cargo, skrývání, složené typy, tok řízení, slices
  5. Rust - datové struktury, balíky, vestavěné kolekce
  6. Rust - generické typy, doba života (lifetime)

Osnova ostatní - projekty, práce

  1. Jednoduchý program v jazyce Haskell (Hugs, GHC, GHCi).
  2. 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.
  • 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 - 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í - 20 bodů celkem.
  • Závěrečná zkouška - písemná, formou otázek a úkolů, 2 opravné termíny (60 bodů - pro získání bodů ze zkoušky je nutné zkoušku vypracovat tak, aby byla hodnocena nejméně 25 body, v opačném případě bude zkouška hodnocena 0 body).

Rozvrh

DenTypTýdnyMístn.OdDoKapacitaPSKSkupInfo
Po přednáška 1., 2., 3., 4., 5., 6., 7., 8., 10., 11., 12., 13. výuky E104 E105 E112 13:0015:50294 1MIT 2MIT NBIO - NSPE NEMB xx Kolář
Po poč. lab 1., 3., 5., 7., 11., 13. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Po poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Po poč. lab 1., 3., 5., 7., 11., 13. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
Po poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
Út poč. lab 1., 3., 5., 7., 9., 11., 13. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Út poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Út poč. lab 1., 3., 5., 7., 9., 11., 13. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
Út poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
Čt poč. lab 1., 3., 5., 7., 9., 11., 13. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Čt poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 16:0017:5040 1MIT 2MIT xx
Čt poč. lab 1., 3., 5., 7., 9., 11., 13. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
Čt poč. lab 2., 4., 6., 8., 10., 12. výuky N204 N205 18:0019:5040 1MIT 2MIT xx
poč. lab 1., 3., 5., 7., 9., 11. výuky N204 N205 09:0010:5040 1MIT 2MIT xx
poč. lab 2., 4., 6., 10. výuky N204 N205 09:0010:5040 1MIT 2MIT xx
poč. lab 1., 3., 5., 7., 9., 11. výuky N204 N205 11:0012:5040 1MIT 2MIT xx
poč. lab 2., 4., 6., 10. výuky N204 N205 11:0012:5040 1MIT 2MIT xx

Zařazení předmětu ve studijních plánech

Nahoru