Kurz bude zahrnovat radu technik, algoritmu a systému relevantních pro imperativní, funkcionální, objektove orientované a další programovací paradigmata. Obsah kurzu bude prizpusoben zájmum studentu. Typická osnova bude zahrnovat témata jako např.:
*Imperativní programování
- Emulace prehistorického pocítacového systému (EDSAC)
- Programování s GOTO, PEEK a POKE (BASIC)
*Funkcionální programování
- Implementace malého interpretru jazyka LISP (LISP)
- Ruzné zpusoby interpretace funkcionálních jazyku (ML)
- Implementace Hindley-Milner algoritmu pro inferenci typu (ML)
*Objektově orientované programování
- Vytvorení minimálního ciste objektove orientovaného systému (Smalltalk)
- Pridávání schopnosti reflexivního programování (Smalltalk)
- OO programování založené na trídách vs. prototypech
*Další programovací techniky
- Implementace unifikacního algoritmu (Prolog)
- Techniky implementace tabulkových procesoru (Excel)
- Funkcionálně reaktivní programování (Elm)
Cílem předmětu je naučit, jak fungují základní techniky, algoritmy a systémy na kterých stojí různé programovací jazyky tím, že od základu implementujeme jejich miniaturní verze. Předmět pokrývá různá programovacích paradigmata včetně funkcionálního, objektově orientovaného, imperativního a logického až po systémy pro koncové uživatele jako jsou tabulkové procesory.
Příklady budou používat programovací jazyk F#, který bude krátce představen. Předmět je vyučován jednou za dva roky a jeho výuka alternuje s předmětem NPRG075.