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 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.