EPL: Lectures
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 (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 (TBC).
- Elizabeth Polgreen, October 10.
Title: Program synthesis: automatically writing (correct) code
Are you sick of writing your own code, but ChatGPT always gets it wrong?
In this lecture, I will introduce formal program synthesis algorithms[0]: algorithms for synthesizing code that, unlike large language model generated code, is guaranteed to satisfy a given specification. These algorithms have been used for synthesizing controllers[1], planning[2], synthesizing summaries of libraries[3], lifting code from language to another[4], and even scientific discovery[5].
In this lecture, I will introduce the basics of formal program synthesis, talk about their applications, strengths and limitations, and maybe spark some ideas for fourth year projects.
- [0] Program Synthesis: Challenges and Opportunities - David et al
- [1] Automated Formal Synthesis of provably safe controllers for continuous plants - Abate et al
- [2] DeepSynth: program synthesis for automatic task segmentations in deep reinforcement learning - Hasanbeig et al
- [3] Top Down Synthesis for Library Learning - Bowers et al
- [4] Verified Lifting of Stencil Computations - Kamil et al
- [5] Neurosymbolic programming for science - Sun et al
- Amir Shaikhha, November 4
"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.