: Rather than surveying popular languages, the course uses a single mathematical framework (judgments and derivations) to explain diverse paradigms, including functional, imperative, and concurrent programming.
15-312: Foundations of Programming Languages is a rigorous undergraduate course at Carnegie Mellon University (CMU)
Whether you are an aspiring language designer, a compiler engineer, or a software developer looking to drastically level up your code reasoning, understanding the core tenets of 15-312 will transform the way you view software. 1. The Core Philosophy of 15-312
By introducing recursive functions and infinite loops, the language transitions into , a core model for functional programming. Here, you encounter the Y Combinator and fixed-point operators, discovering how a language can achieve Turing-completeness without relying on mutating state or loops. Polymorphism and System F
Yes. Here is why the makes you a better engineer:
Traces execution clock-cycle by clock-cycle, showing every individual transition. This is crucial for modeling parallelism and concurrency.
When you look at , you instantly recognize its borrow checker as an implementation of substructural/linear type systems . When you work with Haskell , you understand its lazy evaluation via lazy dynamics . When you deal with Java or TypeScript , you recognize the structural tradeoffs made to balance subtyping with type safety.
How does a program run ? Operational semantics gives a mathematical model of computation. There are two main styles taught in 15-312:
While 15-312 is deeply theoretical, its practical implications dictate the modern software engineering landscape:
This course is a cornerstone of the CMU CS curriculum, often taught by Professor Robert Harper , whose seminal textbook, , serves as the primary resource. The Mathematical Lens: Type Theory and Semantics