15312 Foundations Of Programming Languages ((top)) Access
This deep link between programming and logic means that writing a correct program is like constructing a proof of a theorem.
On the surface, "Foundations of Programming Languages" is about a specific set of topics and skills. But its true value lies in how it fundamentally changes you as a computer scientist. After taking this course, new programming languages are no longer mysterious artifacts to be learned but rather coherent structures to be analyzed. You will be able to understand the trade-offs in a language's design, anticipate its safety guarantees (or lack thereof), and design new language features with confidence. The course teaches you to view a programming language not as a collection of ad-hoc syntax, but as a mathematical object with intrinsic properties.
As the course progresses, students use these foundational tools to analyze complex language paradigms, including: 15312 foundations of programming languages
You might wonder why a software engineer needs this level of mathematical rigor. The benefits are profound:
| | Lecture Topic(s) | PFPL Ch. | Homework | | :--- | :--- | :--- | :--- | | Jan 14 | Introduction: What is a Programming Language? | 1-3 | Assignment 0 Out | | Jan 16 | Rule Induction, Binding, Substitution | 4-5 | | | Jan 21 | Dynamics, Statics, and Safety | 4-7 | Assignment 0 Due, Assignment 1 Out | | Jan 28 | Gödel's T and PCF (a core functional language) | 10 | | | Feb 4 | Products and Sums (Data Types) | 11-12 | Assignment 1 Due, Assignment 2 Out | | Feb 11 | Objects and Dynamic Dispatch | 25 | | | Feb 18 | Dynamic Languages as Typed Languages | 19 | Assignment 2 Due, Assignment 3 Out | | Feb 20 | Church's λ-Calculus (The foundation of computation) | 17 | | | Mar 6 | Midterm Exam | | | | Mar 18 | System F and Polymorphism (Generics) | 20 | | | Apr 1 | Control Stacks and Continuations | 28 | | | Apr 8 | Concurrency and Parallelism | 40 | | | Apr 15 | Modularity and Existential Types | 24 | Assignment 5 Out | | Apr 29 | Course Review | | Assignment 5 Due | This deep link between programming and logic means
(evaluation rules) for a language. This formal approach ensures that if a program "type checks," it is guaranteed to be well-behaved—a concept famously summarized by Robin Milner: "Well-typed programs do not go wrong." What You Learn
Originally designated as a core course at Carnegie Mellon University (CMU), 15-312 introduces students to the rigorous, formal frameworks used to define, analyze, and implement programming languages. 1. What is 15-312? After taking this course, new programming languages are
Defining exactly how a program executes via transition systems. Key Pillars of the Curriculum 1. Structural Induction
: Formal study of functional, imperative, concurrent, and object-oriented programming models.
This guide provides a foundational overview of the concepts typically found in advanced PL theory courses. For specific syllabi and course materials, it is recommended to check the official university curriculum. If you are interested, I can also provide:
Syntax is the surface. In formal foundations, we don't use regular expressions; we use and Abstract Syntax Trees (ASTs) . 15-312 emphasizes the difference between concrete syntax (what the programmer types) and abstract syntax (what the compiler understands). You learn to define languages using BNF (Backus-Naur Form) with a rigor that erases ambiguity.