15312 Foundations Of Programming Languages Jun 2026

Programming languages are the bedrock of computer science. While most developers focus on using languages to build software, a deeper question remains: how do we design, analyze, and prove that these languages actually work correctly?

The keyword is not just an academic search term. It is a gateway to a specific intellectual tradition—one that views programming not as a trade, but as a branch of constructive logic .

| | 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 | 15312 foundations of programming languages

The foundations of programming languages provide a rich and complex area of study, encompassing syntax, semantics, paradigms, design principles, and implementation techniques. By understanding these concepts, developers can create more effective, efficient, and expressive programming languages.

Through existential types, we learn how to hide the implementation details of a module, exposing only what is necessary—a formalization of the "information hiding" principle. Programming languages are the bedrock of computer science

Most programmers learn a language by trial and error, relying on compilers to catch bugs. 15-312 treats languages as formal mathematical systems. Instead of asking "Does this script run?", the course asks "What are the fundamental properties of this language?" To answer this, the course relies on three pillar concepts:

Pure lambda calculus has no memory. Real programs need to store and change values. That requires and assignment . It is a gateway to a specific intellectual

: Students use formal techniques like structural induction and inference rules to prove properties like Type Safety , ensuring that well-typed programs do not exhibit undefined behavior.

Semantics define what the code actually does. The course relies on to specify execution step-by-step using precise inductive rules. This replaces vague English documentation with mathematical certainty. 2. Type Systems and Safety

(Deep dive into call-by-value vs. call-by-name)

As the study progresses, the foundations expand to include complex features that define modern computing: