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.
Poslední úprava: Hnětynka Petr, doc. RNDr., Ph.D. (02.05.2023)
The goal of this course is to teach how fundamental programming language techniques, algorithms and
systems work by writing their miniature versions. The course covers multiple paradigms including
functional, object-oriented, imperative and logic, as well as end-user programming environments like
spreadsheets. Examples will be given using the F# programming language, which will be briefly
introduced. The course is taught once every two years and its teaching alternates with the course
NPRG075.
Poslední úprava: Hnětynka Petr, doc. RNDr., Ph.D. (02.05.2023)
Podmínky zakončení předmětu -
Zápocet bude udelen za aktivní úcast. Studenti budou behem kurzu rešit nekolik ruzných cvicení zahrnující napríklad pridávání nových vlastností do miniaturních implementací vytvorených v prubehu kruzu.
Poslední úprava: Petříček Tomáš, Mgr., Ph.D. (10.05.2023)
The credits will be awarded for active participation in the course. Students will complete a number of exercises throughout the course such as adding new features to the discussed miniature implementations.
Poslední úprava: Hnětynka Petr, doc. RNDr., Ph.D. (26.04.2023)
Literatura -
Syme, D., Granicz, A., Cisternino, A. (2012). Expert F# 3.0. Apress.
Nystrom, R. (2021). Crafting Interpreters. Genever Benning.
Sestoft, P. (2014). Spreadsheet Implementation Technology: Basics and Extensions. MIT Press.
Goldberg, A., & Robson, D. (1983). Smalltalk-80: The Language and its Implementation. Addison-Wesley
Abelson, H., Sussman, G. J. (1996). Structure and Interpretation of Computer Programs. MIT Press.
Appel, A. W. (2004). Modern Compiler Implementation in C. Cambridge University Press.
Abadi, M., & Cardelli, L. (2012). A theory of objects. Springer Science & Business Media.
Poslední úprava: Hnětynka Petr, doc. RNDr., Ph.D. (26.04.2023)
Syme, D., Granicz, A., Cisternino, A. (2012). Expert F# 3.0. Apress.
Nystrom, R. (2021). Crafting Interpreters. Genever Benning.
Sestoft, P. (2014). Spreadsheet Implementation Technology: Basics and Extensions. MIT Press.
Goldberg, A., & Robson, D. (1983). Smalltalk-80: The Language and its Implementation. Addison-Wesley
Abelson, H., Sussman, G. J. (1996). Structure and Interpretation of Computer Programs. MIT Press.
Appel, A. W. (2004). Modern Compiler Implementation in C. Cambridge University Press.
Abadi, M., & Cardelli, L. (2012). A theory of objects. Springer Science & Business Media.
Poslední úprava: Hnětynka Petr, doc. RNDr., Ph.D. (26.04.2023)
Sylabus -
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)
Poslední úprava: Petříček Tomáš, Mgr., Ph.D. (10.05.2023)
The course will cover a range of techniques, algorithms and systems relevant to imperative, functional, object-oriented as well as other programming paradigms. The content will be adapted based on the interests of the students. A typical syllabus would include topics such as the following:
Imperative programming
Emulating prehistoric computer system (EDSAC)
Programming with GOTO, PEEK and POKE (BASIC)
Functional programming
Implementing a small LISP interpreter (LISP)
Different ways of interpreting functional languages (ML)
Writing a Hindley-Milner type inference algorithm (ML)
Object-oriented programming
Writing a minimal pure object-oriented system (Smalltalk)