COMP 321: Design of Programming Languages

Dan Licata Fall, 2026

Objectives

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

This semester, we will focus first on imperative programming as in C, then on functional programming as in SML or OCaml, and then see how these concepts are combined in the Rust programming language. Along the way, we will see concepts such as first-order and higher-order functions, products/sums/datatypes, polymorphism, type classes/traits, linear typing and borrow checking, mutable state, existential types/objects, and concurrency.

Prerequisites: COMP 212, or permission of instructor.

Activities

There will be two course meetings per week, Mon-Wed 2:50pm-4:10 in Exley 139. 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 8 to 10 homework assignments, each 1 to 2 weeks in duration. Assignments will have both written and programming components; programming will be in Standard ML.

In addition to the lectures and provided lecture notes, you might want to do some supplementary readings from two sources: Some parts of the course will follow Practical Foundations for Programming Languages by Robert Harper. An online preview is available, and a digital copy is available through the Wesleyan library. 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. For the material on Rust at the end of the course, there will be some readings from Rust book and Rust by example.

Assessment

Your grade will be based on homework assignments (60%), class and/or help session participation (5%), and a final assignment with an oral exam during the final exam period (35%). (Percentages are subject to change.)