Description
This is a course on the principles of programming languages and their application. The emphasis is on ideas and techniques relevant to practitioners, but includes theoretical foundations crucial for deeper understanding: abstract syntax, formal semantics, type systems, and modularity. Work in the course involves exploring programming languages and features both as a user (by writing programs in those languages), as a language designer (by implementing interpreters for those languages), and as a scholar (by proving mathematical properties of them). We will investigate approaches to modularity such as data abstraction, inheritance, and polymorphism independent of their realization in any particular language. The course will also offer a historical perspective on the evolution of programming languages and why some designs thrive while others fail. Upon successfully completing this course, students will be able to:
- Write efficient and correct programs in a functional programming language, Haskell.
- Precisely formulate the syntax and runtime behavior of a programming language.
- Specify different notions of type safety for a programming language and reason about a programming language's semantics via mathematical induction.
- Distinguish between different approaches to modularity and abstraction provided by programming languages.
The course is structured into five sections, the first four of which roughly align with these topics. The final section will consider the realization of some of these ideas in Rust, a modern systems programming language.
- Write efficient and correct programs in a functional programming language, Haskell.
- Precisely formulate the syntax and runtime behavior of a programming language.
- Specify different notions of type safety for a programming language and reason about a programming language's semantics via mathematical induction.
- Distinguish between different approaches to modularity and abstraction provided by programming languages.
The course is structured into five sections, the first four of which roughly align with these topics. The final section will consider the realization of some of these ideas in Rust, a modern systems programming language.
General Information
Course Website:
Name | Office Hours | |
---|---|---|
Benjamin Delaware | When? Where? | |
Shivaram Gopal | When? Where? |