This course introduces basic concepts and techniques in the foundational study of programming languages, as well as their formal logical underpinnings. The central theme is the view of individual programs and whole languages as mathematical objects about which precise claims may be made and proved. Particular topics include operational techniques for formal definition of language features, type systems and type safety properties, polymorphism and subtyping, and foundations of object-oriented programming.
Breakdown for the course grade is as follows:
An undergraduate-level course in programming languages or compilers; significant programming experience.
Types and Programming Languages. Benjamin C. Pierce. MIT Press, 2002.