Lecture Recordings
All lecture recordings should be accessed via Learn; you will need to log in using your EASE account. (Learn provides you with access to any lecture recordings available for this course. You will need to select the "lecture recording" link once, before you can access any direct links to a lecture recording.)
Lecture Slides
Lecture slides will be posted here as the course proceeds. The suggested readings cover related material in "Practical Foundations for Programming Languages (second edition)" (PFPL2), "Concepts in Programming Languages" (CPL), and other sources, however, we will cover some topics in a different order or differently than in these textbooks.
- Course Introduction and Admin. (pdf) Related reading: CPL 1
- Lecture 1: Abstract Syntax (pdf). Related reading: PFPL2 1.1; CPL 4.1, 5.4.1
- Lecture 2: Evaluation (pdf, LArith.pdf). Related reading: PFPL2 2.1-3, 2.6, 7.1, CPL 5.4.2
- Lecture 3: Booleans, conditionals, and types ( lec3.pdf , LIf.pdf) Related reading: PFPL2 4.1-4.2, CPL 5.4.2, 6.1, 6.2
- Lecture 4: Variables, scope, and binding (pdf, LLet.pdf). Related reading: PFPL2 1.2, 3.1-3.2, CPL 4.2, 7.1
- Lecture 5: Functions and Recursion (pdf, LRec.pdf). Related reading: PFPL2 8, 19.1-2; CPL 4.2, 5.4.3
- Lecture 6: Data structures (pdf, LData.pdf). Related reading: PFPL2 10.1, 11.1, CPL 5.4.4
- Lecture 7: Records, subtyping, and pattern matching (pdf). Related reading: CPL 6.5; PFPL2 10.2, 11.2-3, 24.1-3
- Lecture 8: Polymorphism and type inference (pdf, LPoly.pdf). Related reading: PFPL2 16.1; CPL 6.3-4
- Lecture 9: Programs, modules, and interfaces (pdf). Related reading: CPL 9, PFPL2 42.1-2, 44.1
- Lecture 10: Objects and classes (pdf). Related reading: CPL 10, 12.5, 13.1-2
- Lecture 11: Object-oriented functional programming (pdf). Related reading: Odersky and Rompf
- Lecture 12: Imperative programming (pdf, LWhile.pdf). Related reading: CPL 4.4, 5.1-2, 8.1
- Lecture 13: Small-step semantics and type safety (pdf). Related reading: CPL 6.1-2, PFPL2 5.1-2,2.4,7.2, 6.1-2
- Lecture 14: References, arrays and resources (pdf). Related reading: PFPL2 35.1-3, CPL 5.4.5, 13.3
- Lecture 15: Evaluation strategies and laziness (pdf). Related reading: PFPL2 36.1, CPL 7.3, 8.4
- Lecture 16: Exceptions and Continuations (pdf). Related reading: CPL 8.2-3, PFPL2 29.1-3, PFPL2 30.1-2
- Course review lecture (pdf)
Guest Lectures
There will be two guest lectures:
- October 12: Elizabeth Polgreen. Program synthesis This lecture will be an intro to formal synthesis algorithms used to automatically synthesise code that satisfies specifications. (Slides)
- November 9, Amir Shaikhha. Building DSL compilers in Scala
Domain-specific languages (DSLs) are specialized programming languages tailored to address specific problem domains, offering concise, expressive, and efficient solutions within their context. In this talk, we give an introduction to DSLs and show how to use Scala to build compilers for them.