CS 242: Programming Languages
Course Description
This course explores foundational models of computation, such as the lambda calculus and other small calculi, and the incorporation of basic advances in PL theory into modern programming languages such as Haskell and Rust. Topics include type systems (polymorphism, algebraic data types, static vs. dynamic), control flow (exceptions, continuations), concurrency/parallelism, metaprogramming, verification, and the semantic gap between computational models and modern hardware. The study of programming languages is equal parts systems and theory, looking at how a rigorous understanding of the semantics of computation enables formal reasoning about the behavior and properties of complex real-world systems. Prerequisites: 103, 110.