Introduction to Functional programming

The course is an introduction to functional programming. We will discuss some basic concepts and approaches in this area, such as lambda calculus and reduction orders, lazy evaluation, type systems and type inference, polymorphism, inductive and functional data structures, folds, memoization, continuations, algebraic data structures, functors, monads, recursion schemes, proof of program properties, etc. We will also see how these concepts and approaches solve important and interesting practical problems. Students will learn how to create applications in a pure functional programming language Haskell. Besides coding, students will learn how to test their programs, and how to use developers tools to debug and improve programs’ efficiency. The course provides solid ground for using the functional programming paradigm in mainstream languages and is a prerequisite for many programming languages theory courses.

Readings (together with Ekaterina Verbitskaia):

Place Year Role Comments Materials
Neapolis University Spring 2023 Lectures + practices Short week intensive  
Jacobs University
(now Constructor University)
Autumn 2022 Lecturer   Lectures (see below)
Practice

Lectures:


Advanced Functional programming

Readings (together with Ekaterina Verbitskaia):

Place Year Role Comments Materials
Constructor University Autumn 2024      

Metacomputations

[ENG] The course is an introduction into metacomputations, a field of computer science that deals meta-programs design. Meta-program is a program that manipulate other programs as data, including generating other programs as a result of its work. The area is closely related to program optimizations and programming languages semantic, as well as exposure to program generation. Students are introduced to the concepts of Futamura projections, program specialization, supercompilation, distillation and so on. In practice, it is expected that both a self-applied tiny Pascal-like language specializer capable of generating programming language compilers by their interpreters and a positive supercompiler of simple functional language would be implemented.

[RUS] Введение в метавычисления

Курс является вводным в метавычисления — области информатики, занимающейся проектированием мета-программ, т.е. программ, манипулирующих другими программами как данными, в том числе, порождая последние как результат своей работы. Эта область тесно связана как с программными оптимизациями и семантиками языков программирования, так и с автоматической генерацией программ. Слушатели знакомятся с понятиями проекций Футамуры, специализации программ, суперкомпиляции, дистилляции и т.п. На практике ожидается, что каждый реализует как самоприменимый специализатор игрушечного Pascal-подобного языка, способный порождать компиляторы языков программирования по их интерпретаторам, так и позитивный суперкомпилятор простого функционального.

Videos:

Past readings:

Place Year Role
HSE + IFMO 2021 Lectures + practices
HSE + IFMO 2020 Lectures + practices
HSE + IFMO 2019 Lectures + practices
HSE + IFMO 2018 Lectures + practices
AU 2017 Lectures + practices
AU 2016 Lectures + practices

Bibliography:


Compilers

[ENG] The course is an introduction to the field of programming languages, compilers, and other language tools. The course includes some basic concepts and approaches in the area, such as the operational semantics of programming languages, intermediate representation of programs, interpretation, program transformations, etc. It also shows how these concepts and approaches solve important and interesting practical problems. It is assumed that students in the process of completing assignments by the end of the course will implement a full-fledged compiler to machine code for a simple but fully functional imperative programming language (Lama) containing expressions, assignments, control constructs, higher-order functions, and dynamic data structures. The same language is used as the main source language throughout the course.

Past readings:

Place Year Role
Constructor University Spring 2023 Lectures + practices
Neapolis University Spring 2023 Lectures + practices

Bibliography:

[RUS] Введения в компиляторы / Языки программирования и компиляторы

Данный курс представляет собой начальное введение в область языков программирования, компиляторов и других языковых инструментов. Курс включает некоторые основные понятия и подходы в данной области, такие, как операционная семантика языков программирования, промежуточное представление программ, интерпретация, преобразования программ и т.д., а также показывается, как эти понятия и подходы решают важные и интересные практические задачи. Предполагается, что слушатели в процессе выполнения заданий к концу курса реализуют полноценный компилятор в машинный код для простого, но вполне функционального языка императивного программирования (Lama), содержащего выражения, присваивания, конструкции управления, функции высших порядков и динамические структуры данных. В качестве основного инструмента в рамках курса будет использован тот же самый язык.

(RU)

Past readings (together with Dmitri Boulytchev (Дмитрий Юрьевич Булычев)):

Place Year Role
HSE + IFMO Autumn 2021 Lectures + practices (2 times)
CSC + ETU Spring 2021 Practices
HSE + IFMO Autumn 2020 Lectures + practices
FMCS SPbU Autumn 2020 Lectures + practices
CSC + ETU Spring 2020 Lectures + practices (2 times)
HSE + IFMO Autumn 2019 Lectures + practices
CSC + ETU Spring 2019 Lectures + practices (2 times)
HSE + IFMO Autumn 2018 Lectures + practices (2 times)
CSC + ETU Spring 2018 Lectures + practices
AU Autumn 2017 Practices

Past readings (Language processors design technologies and tools / Технологии и инструменты построения языковых процессоров (together with Anton Podkopaev (Антон Викторович Подкопаев)):

Place Year Role
IFMO Осень 2017 Lectures + practices
AU Осень 2016 Lectures + practices
IFMO Осень 2016 Lectures + practices
IFMO Осень 2015 Lectures + practices

Other

Course Year Place Role
Mathematical logic in Computer Science (Математическая логика в Информатике) Spring 2021 FMCS SPbU Practices
Operational Systems (Операционные Системы) Spring 2021 FMCS SPbU Practices
Linux Basics (Основы Linux) Autumn 2020 FMCS SPbU Lectures + practices
Programming Basics (Основы Программирования) Autumn 2020 FMCS SPbU Practices
Computer Architecture (Архитектура компьютерных систем) Autumn 2020 FMCS SPbU Practices
Introduction into OOP (Введение в ООП) Autumn 2020 FMCS SPbU Practices