COMP 321: Principles of Programming Languages

Dan Licata Fall, 2021


In this course, you will learn the theory and practice of programming languages. Specifically, you will learn to:

You will apply these skills to study programming language features such as functions, data types, dynamic typing, polymorphism, abstract types, objects, control effects, state, laziness, parallelism, and concurrency.

Prerequisites: COMP 212, or permission of instructor.


There will be two course meetings per week, Wed-Fri 8:20am-9:40am in the Labyrinth tent (or Exley 121 in case of bad weather). This time may be used for lectures, lab-like small-group or individual work, or homework help sessions. Lectures will be your primary source of information for the course, and attendance is strongly encouraged.

There will be around 10 homework assignments, each 1 to 2 weeks in duration. Assignments will have both written and programming components; programming will be in Standard ML.

Readings will be assigned from Practical Foundations for Programming Languages by Robert Harper. An online preview is available, and the full book site contains some additional material. The readings are intended as an additional resource to review and supplement what is discussed in lecture; you do not need to read about a topic in advance of the lecture on it.


Your grade will be based on homework assignments (50%), and a take-home midterm exam (25%) and a take-home final exam (25%). (Percentages are subject to change.)