A programming language is defined by a set of inductive rules, similar to geometry or formal logic.
Everything begins with the λ-calculus. Alonzo Church’s tiny language—with only variables, abstraction, and application—is Turing complete. In 15-312, you learn:
For those interested in exploring the course details for the upcoming semester, you can check the 2026 CMU Course Catalog . 15-312: Foundations of Programming Languages (Fall 2023) 15312 foundations of programming languages
A central pillar of 15-312 is the study of type systems. In this framework, types are not just data tags; they are partial proofs of program correctness.
Engineers frequently need to write custom configuration languages or query engines. 15-312 provides the tools to make these custom tools secure and efficient. Conclusion A programming language is defined by a set
This framework is not just theoretical; you'll implement it directly. Your programming assignments will involve building interpreters for the languages you define, deriving the interpreter's code directly from the formal static and dynamic semantic rules.
Defining which expressions are "done" evaluating (e.g., the number 5 or a function abstraction). In 15-312, you learn: For those interested in
You will no longer wonder why a language allows certain actions and forbids others. You will understand the type system behind it.
A robust programming language is built on two primary pillars: Syntax and Semantics. Syntax (The Form)
15-312 flips this paradigm completely. It approaches programming languages through the lens of and formal semantics . The core philosophy rests on a few radical ideas: