Dan Grossman   Teaching Materials

Graduate Programming-Language Semantics


Context and Motivation

I developed these materials for an introductory graduate-level course on programming languages that I taught almost annually from 2003–2012. The materials on this page have been suitably cleaned up and extracted from any particular course offering so that they should be easy for others to adapt in whole or, more likely, in part. Instructors are welcome to modify and post modified materials however they wish. There is no need to retain my name.

Most of the students in my courses were top Ph.D. students in areas other than programming languages. My goal was to impart the field of programing languages' emphasis on well-defined software, precise definitions, model-building, and rigorous proofs, which should serve all computer-scientists well. An important secondary goal was to make the research literature more approachable and to provide an essential starting point for junior researchers seeking to contribute to programming languages.

As usual for this sort of course, few formal pre-requisites are assumed. Mathematical maturity, programming ability, and familiarity with proofs by induction are important for handling the material and, just as importantly, appreciating it.


Lecture Materials

The course material is organized into 26 "lectures" plus a Caml programming tutorial, with slides (pdf) and other materials linked to below. Because I do not have corresponding reading notes, instructors will likely want enough expertise to know most of the content already. They will also surely want to modify/reorder/add/delete content, so below the list of lectures are all the source materials, instructions for using them, and a graph that approximates dependencies among lectures.

I use these materials in a 10-week (quarter, not semester) course with 2 80-minute lectures per week. Many lectures do not correspond to 80 minutes: Lectures 1, 2, 12, 17, 18, 19, 24, 25, 26, and possibly others are shorter; some others are likely longer. Overall there is more material than I can cover in 10 weeks, so I usually skip some or all of the material in lectures 13, 14, 18, 19, 25, and 26. Conversely, there may be too little material for a semester, but there are many great topics for which I have not developed materials, such as type inference, modules, programming with laziness, monads, type classes, denotational semantics (cf. lecture 5), Hoare logic, abstract interpretation, pi calculus, etc.

Slides and Other Materials

  1. 0. Caml Tutorial  1up-slides  6up-slides  code (tar) (I do the tutorial between the material in Lectures 1 and 2)
  2. 1. Introduction  1up-slides  6up-slides
  3. 2. Syntax  1up-slides  6up-slides  proofs
  4. 3. Operational Semantics  1up-slides  6up-slides  handout  proofs
  5. 4. Proofs about Operational Semantics  1up-slides  6up-slides  proofs
  6. 5. Pseudo-Denotational Semantics  1up-slides  6up-slides  code (.tar)
  7. 6. Little Trusted Languages; Equivalence  1up-slides  6up-slides  proofs
  8. 7. Lambda Calculus  1up-slides  6up-slides
  9. 8. Reduction Strategies; Substitution  1up-slides  6up-slides
  10. 9. Simply Typed Lambda Calculus  1up-slides  6up-slides
  11. 10. Type-Safety Proof  1up-slides  6up-slides  proofs
  12. 11. STLC Extensions and Related Topics  1up-slides  6up-slides
  13. 12. The Curry-Howard Isomorphism  1up-slides  6up-slides  handout
  14. 13. Evaluation Contexts; 1st-Class Continuations; Continuation-Passing Style  1up-slides  6up-slides  code (ml)
  15. 14. Efficient Lambda Interpreters  1up-slides  6up-slides  code (ml)
  16. 15. Subtyping  1up-slides  6up-slides
  17. 16. Parametric Polymorphism  1up-slides  6up-slides
  18. 17. Recursive Types  1up-slides  6up-slides
  19. 18. Existential Types  1up-slides  6up-slides  code (ml)
  20. 19. Type-and-Effect Systems  1up-slides  6up-slides
  21. 20. Shared-Memory Parallelism and Concurrency  1up-slides  6up-slides  code (ml)
  22. 21. Synchronous Message-Passing and Concurrent ML  1up-slides  6up-slides  code (ml)  code (mli)
  23. 22. Class-Based Object-Oriented Programming  1up-slides  6up-slides
  24. 23. Types for OOP; Static Overloading and Multimethods  1up-slides  6up-slides
  25. 24. Bounded Polymorphism  1up-slides  6up-slides
  26. 25. Multiple Inheritance and Interfaces  1up-slides  6up-slides
  27. 26. Classless OOP  1up-slides  6up-slides
  29. 27. Higher-Order Polymorphism contributed by Matthew Fluet  1up-slides  6up-slides

Lecture Dependencies

graph of lecture dependencies

(Caml tutorial and what depends on it not shown)

Source and Instructions for Editing the Materials

gpl_lecture_sources.tar contains all the files, mostly LaTeX, needed to produce the pdf files above. You need the LaTeX Beamer class (not included, but widely deployed) and mathpartir.sty (included for convenience).

Instructions for editing and compiling lecture slides (nothing very complicated):


Please do not post solutions to these exercises. Instructors may contact me for sample solutions.

In a 10-week term, I recommend these 5 assignments (though I'm least satisfied with Homework 4):

* Contact me for the Homework 4 code. It contains a solution to Homework 3, so it should be mailed to students or posted in an appropriately private place.

Here are additional homework problems that work well. You might prefer them or have a longer course.

I have also used this end-of-term reading/writing assignment:  pdf  tex

The list of suggested papers for the writing assignment should be updated so that it emphasizes recent work. Other instructors will surely have great additonal suggestions. Choosing papers at the right difficulty level — requiring some additional reading by students but remaining approachable after (and only after) taking most of the course — is crucial. I also believe a list of 15-20 papers is about the right length; it gives a diverse set of options without asking students to peruse vast amounts of the literature.


Sample Exams

The midterm exams are 80 minutes long and cover material up through lecture 10:

The final exams are 110 minutes long and predominantly cover material not covered on the midterm:

Similar Courses

Naturally there are many great graduate-level PL courses. The courses above are those I am aware of that are most similar to my materials and have significant materials available on-line. Please let me know of others.


Contact Information / Request for Feedback

Please let me know how you are using these materials and how they can be improved. Even typos are helpful.

picture of Dan's email address: djg and then cs.washington.edu

Last updated: June 2020