Stephen A. Edwards Columbia University Crown
COMS 6998 007
Types, Languages and Compilers
Spring 2023

General Information

Class meets Mondays, 4:10 - 6:40 PM in 451 CSB.

Staff

Name Email Office hours Location
Prof. Stephen A. Edwards sedwards@cs.columbia.edu By appt. Online
Wei Qiang wq2167@columbia.edu
Emily Sillars ems2331@columbia.edu

Overview

An advanced course on modern programming language and type theory with a focus on functional languages and concrete implementations. The goal is to become fluent in the concepts and formalisms typical of papers in conferences such as POPL.

Prerequisites: COMS 4115 Programming Languages and Translators; COMS 3203 Discrete Mathematics; COMS 3261 Computer Science Theory. Equivalents acceptable.

Schedule

Date Lecture Notes Due
Mon Jan 23 Introduction
Inductive Definitions
pdf
pdf
Mon Jan 30 Regular Expressions
pdf
Mon Feb 6 Context Free Grammars
pdf
Mon Feb 13 The Lambda Calculus
pdf
Mon Feb 20 Simply Typed Lambda Calculus
pdf
Mon Feb 27 The Hindley-Milner Type System
pdf
Mon Mar 6 Operational Semantics
pdf
Mar 13-17 Spring Break
Mon Mar 20
Mon Mar 27
Mon Apr 3
Mon Apr 10
Mon Apr 17
Mon Apr 24
Mon May 1
May 9 Final Project Presentations

The Project

You'll perform a design-it-yourself project in the second half of the class.

Resources

Recommended Texts

Robert Harper.
Practical Foundations for Programming Languages.
2nd ed. Cambridge University Press, 2016.

Harper is closest in scope to the class, but we will not follow it slavishly. In particular, it has a lot of detail that will not be discussed.

Cover of Practical Foundations for Programming Languages

Benjamin C. Pierce.
Types and Programming Languages.
MIT Press, 2002.

Pierce is also an excellent reference for this course. As its name suggests, it focuses almost exclusively on types. Unlike Harper, it has extensive discussions of how to implement the discussed ideas in code.

Cover of Types and Programming Languages

Shriram Krishnamurthi.
Programming Languages: Application and Interpretation.
2nd ed. Self-Published, 2017.

Krishnamurthi uses Racket and is heavy on implementation details. It has some discussion of types and dynamic checking through contracts, but is closer to a compiler implementation text than the others listed here.

Cover of Programming Languages: Application and Interpretation

Glynn Winskel
The Formal Semantics of Programming Languages: An Introduction.
MIT Press, 1993.

Winskel is an older book that focuses, unsurprisingly, on programming language semantics (operational, denotational, and axiomatic), but also discusses types and the Lambda Calculus.

Cover of The Formal Semantics of Programming Languages

Links

Class Policies

Valid HTML 4.01Valid CSS