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)
- Adding reflective programming capabilities (Smalltalk)
- Class-based vs. prototype-based OO programming
*Other programming techniques
- Implementing a unification algorithm (Prolog)
- Spreadsheet implementation techniques (Excel)
- Functional reactive programming techniques (Elm)
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.