GitHub repository with code (OCaml/Haskell/Rust) + 3-page written proof of progress & preservation for a core subset.
Modeling the execution of programs (e.g., small-step or big-step operational semantics). Key Programming Language Features Functions & Recursion: The core of functional programming. Types & Products/Sums: How data is structured ( recordsr e c o r d s variantsv a r i a n t s Control Flow: Continuations and exceptions.
Instead of teaching you how to use a specific language like Python or Java, 15-312 teaches you how to design and reason about languages themselves. The course relies heavily on mathematical logic and type theory to prove that a language behaves exactly as intended. Core Pillars of the Curriculum
This article provides a comprehensive overview of the key concepts, methodologies, and techniques taught in advanced programming language foundations, focusing on the rigorous mathematical study of language design. What is "Foundations of Programming Languages"? 15312 foundations of programming languages
If you ever want to build your own DSL (Domain Specific Language) or contribute to a major compiler like LLVM or Rust, these foundations are non-negotiable. Recommended Resources
15312 (often denoted as a course code for graduate-level or advanced undergraduate programming language theory) dives deep into the semantic foundations of programming languages. While introductory courses focus on syntax—what a program looks like—15312 focuses on —what a program means and does . The course provides the mathematical framework to: Formally define the behavior of language features.
Students typically implement language interpreters using . SML is chosen because its powerful pattern matching and strong type system mirror the mathematical logic taught in the lectures. Functional vs. Imperative Mechanics Types & Products/Sums: How data is structured (
Represent "Or" logic. A sum type contains a value of type τ1tau sub 1 or a value of type τ2tau sub 2 Polymorphism and System F
Define a small language of Boolean expressions with and (short-circuiting) and or .
Language design is a critical aspect of programming languages, involving the creation of a new language or the modification of an existing language. In the 15312 course, students learn about the principles of language design, including: Core Pillars of the Curriculum This article provides
Evaluates an expression directly to a final value ( ⇓implies downward
If ( \cdot \vdash e : \tau ) and ( e \Downarrow v ), then ( \cdot \vdash v : \tau ).
How do generics work? 15-312 introduces (the polymorphic