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:
- Intro, ADT
- Lazy, Forcing, Tail Recursion
- Functional Data Structures
- Lambda-calculus: basics
- Lambda-calculus: reduction strategies, CR
- Simple types, System F, Hindley–Milner
- Continuations
- Zippers and “Optics”
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:
- N.D. Jones, C.K. Gomard, and P. Sestoft. Partial Evaluation and Automatic Program Generation
- Partial Evaluation Practice and Theory, Lecture Notes in Computer Science, J.Hatcliff, T.Morgensen, P.Thiemann
- Logic-Based Program Synthesis and Transformation, editor Maurizio Gabbrielli
- K.Launchbury, Projection factorisations in partial evaluation
- A series of PEPM workshop proceedings
- A series of META workshop proceedings
- Staged multi-result supercompilation: Filtering by transformation by Sergei Grechanik, Ilya Klyuchnikov, Sergei Romanenko
- Geoff W. Hamilton. The Next 700 Program Transformers. LOPSTR 2021: 113-134
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:
- A brilliant list of books on compiler construction
- Compiler GCC
- Infrastructure LLVM
- N.Wirth. Compiler Construction
- F.Nielson, H-R.Nielson. Semantics with Applications. A formal introduction
- D.Knuth. Semantics of context-free languages
- G.Hutton, E.Meijer. Monadic parser combinators
- x86 instruction set description
[RUS] Введения в компиляторы / Языки программирования и компиляторы
Данный курс представляет собой начальное введение в область языков программирования, компиляторов и других языковых инструментов. Курс включает некоторые основные понятия и подходы в данной области, такие, как операционная семантика языков программирования, промежуточное представление программ, интерпретация, преобразования программ и т.д., а также показывается, как эти понятия и подходы решают важные и интересные практические задачи. Предполагается, что слушатели в процессе выполнения заданий к концу курса реализуют полноценный компилятор в машинный код для простого, но вполне функционального языка императивного программирования (Lama), содержащего выражения, присваивания, конструкции управления, функции высших порядков и динамические структуры данных. В качестве основного инструмента в рамках курса будет использован тот же самый язык.
(RU)
- Более подробное описание и программа курса
- Lecture records 1 / Записи лекций 1
- Lecture records 2 / Записи лекций 2
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 |