Principles of programming languages

Język wykładowy Angielski
Semestr Zimowy
Status W ofercie
Opiekun Dariusz Biernacki
Liczba godzin 30 (wyk.) 30 (ćw.)
Rodzaj I2.T - teoria inf.
ECTS 6
Polecany dla I roku Nie
Egzamin Tak

Opis przedmiotu:

**Overview:** This course provides students with a deep, working understanding of the essential concepts of programming languages. These concepts relate to the semantics of computer programs and are presented in terms of interpreters and typecheckers, implemented in one of the modern functional languages such as Ocaml, Racket, or Haskell. The course offers both an analytic view of the semantics of programming constructs and a hands-on approach to the executable semantics. In particular, the students are required to implement a number of small interpreters on a weekly basis, and to carry out a final project concerning an implementation of a bigger interpreter or a related programming language processor. **Topics:** * inductive data specification and recursive programming, data abstraction * interpreters, abstract machines, compilers and virtual machines * static (lexical) and dynamic scope, substitution, variable representation * call-by-value, first-class functions and recursion * state, call-by-reference, call-by-name, call-by-need * interpreters in continuation-passing style (CPS), exceptions, multithreading, control operators * CPS transformations * computational effects * abstract machines as defunctionalized interpreters in CPS * deriving a compiler and a virtual machine from an interpreter (optional) * simple types, parametric polymorphism, type checking and type inference * typed modules * basic concepts of object-oriented languages * reduction semantics, PLT Redex (optional) * abstract machines as refocused reduction semantics (optional) **Prerequisites:** It is assumed that the student can program in a functional language and that she/he is familiar with common programming constructs present in mainstream programming languages. The course should be accessible to dedicated undergraduate and graduate students alike. **Bibliography:** * [Essentials of Programming Languages](http://www.eopl3.com/), 3rd edition. Daniel P. Friedman and Mitchell Wand. The MIT Press, 2013. * [Programming Languages: Application and Interpretation](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/), 2nd edition. Shriram Krishnamurthi. 2012. * [Semantics Engineering with PLT Redex](https://redex.racket-lang.org/). Matthias Felleisen, Robert Bruce Findler, Matthew Flatt. The MIT Press, 2009. * [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sicp/full-text/book/book.html), 2nd edition. Harold Abelson, Gerald Jay Sussman, Julie Sussman. The MIT Press, 1996. * [Types and Programming Languages](https://www.cis.upenn.edu/~bcpierce/tapl/). Benjamin C. Pierce. The MIT Press, 2002.