Principles of Programming Languages
Full course description
Programming Languages are ubiquitous. Every program with an “if” statement is, in an important sense, an interpreter for a programming language, however simple! This course will equip students with an analytical toolkit for understanding contemporary programming languages, relating them to a “standard model” of programming languages. The flip-side of analysis is construction: students will develop the basic understanding and knowledge necessary to begin creating programming languages of their own and writing tools which interpret, compile, or otherwise process other programs as their input data. On the way, students will examine the algebraic, functional “heart” of many programming languages, using equational reasoning to investigate time, change, concurrency and communication in programs.
Prerequisites
Discrete Mathematics; Procedural Programming; Object-Oriented Modelling.
Recommended reading
Krishnamurthi, Shriram. Programming Languages: Application and Interpretation. Version 3.2.2., 2023. https://www.plai.org/.
Additional literature:
- Felleisen, Matthias, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. How to Design Programs. Second edition. MIT Press, 2014. https://htdp.org/.
- Fisler, Kathi, Shriram Krishnamurthi, Benjamin S. Lerner, and Joe Gibbs Politz. A Data-Centric Introduction to Computing. Version 2023-02-21., 2023. https://dcic-world.org/.
- Van Roy, Peter, and Seif Haridi. Concepts, Techniques and Models of Computer Programming. Cambridge, Massachusetts: MIT Press, 2004. https://www.info.ucl.ac.be/~pvr/book.html.
- Abelson, Harold, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. 2nd ed. Cambridge, Massachusetts: The MIT Press, 1996. https://mitpress.mit.edu/sites/default/files/sicp/index.html.
- Felleisen, Matthias, Robert Bruce Findler, and Matthew Flatt. Semantics Engineering with PLT Redex. Cambridge, Massachusetts: MIT Press, 2009.