TIES542 Principles of Programming Languages (5 cr)
Tweet text
Description
This course covers the most common concepts and methods in the theory and implementation of programming languages, including operational semantics: big-step (natural) and small-step (structural) semantics; type systems: typing, type inference and type checking; simple imperative programming language: syntax, evaluation and properties; reasoning about imperative programs: termination, determinism, program equivalence, preconditions, postconditions and loop invariants; simply-typed lambda calculus: syntax, reduction, properties and extensions; and reasoning about functional programs: confluence and progress of reduction, preservation of typing and soundness.
Learning outcomes
On this course, we will study programming language theory and ponder the essence of a good programming language. The goal of this course is to familiarize you with the most prominent methods in the study of programming languages and to build you a sufficient foundation for later exploring literature on programming language research without tears. On the side, this course also offers you an excellent excuse to try out new tools and ways of working.
Additional information
Independently Studying
Description of prerequisites
This course does not have absolute prerequisites in the form of other courses. However, participants are expected to have strong grasp of imperative and functional programming, familiarity with the basics of compilers, a notable level of mathematical maturity and a healthy attitude towards work. Mathematical maturity does not only make the course possible to complete, but also helps make connections with topics that are covered in greater depth on other courses.
Courses: Programming, Algorithms, Logics (MATA- course), Functional programming.