• This course is a study of the deeper principles behind programming
language designs, and not of particular programming languages.
• We focus on fundamental language features such as data structures, functions, objects, types and concurrency, and how they interact with each other to achieve the desired expressiveness.
• We study features through the implementation of interpreters and through
operational semantics and type systems, mathematical approaches to program meaning.
• We study the "algebra of programs" (how features and programs relate), through macro encodings and operational equivalence (when one program equals another in behavior)
• We will learn basics of functional programming via the OCaml programming language. OCaml
has features including type inference that make it worthy of study in its own right.
• This course is mathematical in nature and so is recommended for upper-level undergraduate students with strong mathematics skills, or for graduate students. It is not recommended for sophomores.