| Date | Topic (Selected) | PFPL Chapters | | :--------- | :------------------------------------------ | :------------ | | Jan 14 | Introduction: What is a programming language? | 1-3 | | Jan 16 | Rule induction, Binding, Substitution | 4-5 | | Jan 21 | Dynamics, Statics, and Safety | 4-7 | | Jan 28 | Gödel's T and PCF (a language with functions) | 10 | | Feb 4 | Products and Sums | 11-12 | | Feb 11 | Objects and Dynamic Dispatch | 25 | | Feb 18 | Dynamic Languages as Typed Languages | 19 | | Mar 4 | Assignable References | 37 | | Mar 18 | System F and Polymorphism | 20 | | Mar 25 | Evaluation Dynamics | 7 | | Apr 1 | Control Stacks | 28 |

(a well-typed expression is either a value or can take a step) and Preservation (if an expression takes a step, its type remains the same). Effects and Control:

: Understanding type theory and operational semantics changes how you debug. You stop guessing fixes and start reasoning about the exact state transitions of your software.

One of the most powerful ideas in 15312 is the . A type is a label that tells you what kind of value a variable or expression can hold—integer, boolean, string, function, etc.

Programs are viewed as state transition systems.

The "Statics" of a language define what it means for a program to be "well-formed" before it ever runs. You explore:

The course dives deep into the . It explores how functions can take other functions as arguments and how types themselves can be passed as parameters, forming the basis for generics in modern languages like Rust, Swift, and Haskell. 4. Effects and Control

Students explore two critical frameworks for defining a language:

– Define what can be proven about a program using logical assertions (preconditions and postconditions). Example: x = n x := x + 1 x = n + 1

This course provides a rigorous, mathematical framework for understanding programming languages. Rather than learning new languages, you learn how to define and reason about any language. Topics include: inductive definitions, abstract syntax, operational semantics, type systems (simple types, polymorphism, type reconstruction), evaluation strategies (call-by-name, call-by-value), and concurrency basics.

Represent "And" logic. A product type contains a value of type τ1tau sub 1 and a value of type τ2tau sub 2

It provides the theoretical "blueprint" needed to build efficient and correct compilers. The Challenge

The syllabus is famously rigorous, moving from basic lambda calculus to complex concurrent systems. Key topics include:

15-312 is not just a terminal class; it is a gateway to advanced topics:

Enables code reuse while maintaining strict compile-time type safety. Dynamic classification

The ultimate lesson of 15312 is that . They are constrained by mathematical laws. Good language design balances expressiveness, safety, and simplicity.

Comparing functional, imperative, concurrent, and object-oriented models within a unified mathematical framework.

15312 Foundations Of Programming Languages ((top)) -

| Date | Topic (Selected) | PFPL Chapters | | :--------- | :------------------------------------------ | :------------ | | Jan 14 | Introduction: What is a programming language? | 1-3 | | Jan 16 | Rule induction, Binding, Substitution | 4-5 | | Jan 21 | Dynamics, Statics, and Safety | 4-7 | | Jan 28 | Gödel's T and PCF (a language with functions) | 10 | | Feb 4 | Products and Sums | 11-12 | | Feb 11 | Objects and Dynamic Dispatch | 25 | | Feb 18 | Dynamic Languages as Typed Languages | 19 | | Mar 4 | Assignable References | 37 | | Mar 18 | System F and Polymorphism | 20 | | Mar 25 | Evaluation Dynamics | 7 | | Apr 1 | Control Stacks | 28 |

(a well-typed expression is either a value or can take a step) and Preservation (if an expression takes a step, its type remains the same). Effects and Control:

: Understanding type theory and operational semantics changes how you debug. You stop guessing fixes and start reasoning about the exact state transitions of your software.

One of the most powerful ideas in 15312 is the . A type is a label that tells you what kind of value a variable or expression can hold—integer, boolean, string, function, etc.

Programs are viewed as state transition systems. 15312 foundations of programming languages

The "Statics" of a language define what it means for a program to be "well-formed" before it ever runs. You explore:

The course dives deep into the . It explores how functions can take other functions as arguments and how types themselves can be passed as parameters, forming the basis for generics in modern languages like Rust, Swift, and Haskell. 4. Effects and Control

Students explore two critical frameworks for defining a language:

– Define what can be proven about a program using logical assertions (preconditions and postconditions). Example: x = n x := x + 1 x = n + 1 | Date | Topic (Selected) | PFPL Chapters

This course provides a rigorous, mathematical framework for understanding programming languages. Rather than learning new languages, you learn how to define and reason about any language. Topics include: inductive definitions, abstract syntax, operational semantics, type systems (simple types, polymorphism, type reconstruction), evaluation strategies (call-by-name, call-by-value), and concurrency basics.

Represent "And" logic. A product type contains a value of type τ1tau sub 1 and a value of type τ2tau sub 2

It provides the theoretical "blueprint" needed to build efficient and correct compilers. The Challenge

The syllabus is famously rigorous, moving from basic lambda calculus to complex concurrent systems. Key topics include: You stop guessing fixes and start reasoning about

15-312 is not just a terminal class; it is a gateway to advanced topics:

Enables code reuse while maintaining strict compile-time type safety. Dynamic classification

The ultimate lesson of 15312 is that . They are constrained by mathematical laws. Good language design balances expressiveness, safety, and simplicity.

Comparing functional, imperative, concurrent, and object-oriented models within a unified mathematical framework.