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 W 4-5 Th 3-4 1st Floor Mudd TA Area
Emily Sillars ems2331@columbia.edu F 12-2 1st Floor Mudd TA Area

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 "

Mon Feb 13 Context Free Grammars
pdf
Mon Feb 20 The Lambda Calculus
pdf
Mon Feb 27 "

Sun Mar 5 HW 1 pdf
Mon Mar 6 "

Mar 13-17 Spring Break
Mon Mar 20 Simply Typed Lambda Calculus
pdf
Mon Mar 27 The Hindley-Milner Type System
pdf
Sun Apr 2 HW 2 pdf lambda.tar.gzlambda.tar.gz
Mon Apr 3 "

Sun Apr 9 Project Proposal
Mon Apr 10 System F
pdf
Mon Apr 17 Expressiveness (guest lecture)

Mon Apr 24 Dependent Type Systems
pdf
Mon May 1 Curry-Howard Correspondence
pdf
May 11 Final Project Presentations

The Project

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

Projects

DTL: Dependently Typed Language (WQ)
pdfProposal pdfReport ArchiveFiles
Raphael Sofaer and Yiwei Wu
Haskelterpreters: Definitional Interpreters for Haskell (JH)
pdfProposal pdfReport ArchiveFiles
Xurxo Riesco Perez
JambaJuice: Modular Type Inference Prototype (SE)
pdfProposal pdfReport ArchiveFiles
Eric Feng and Emily Sillars
JustYourRegularBRzOs1: Regexp matcher using Brzowski derivatives (ES)
pdfProposal pdfReport ArchiveFiles
Jonathan Cappell
JustYourRegularBRzOs2: Regexp matcher using Brzowski derivatives (ES)
pdfProposal ArchiveFiles
Arman Jindal
OhMyGADT: Language with General Abstract Data Types (ES)
pdfProposal UNRECOGNIZED FILETYPEReport
Alexis Gadonneix and Nikhil Mehta
Quine:

Yiming Fang and Jose Ramos
RustLifetimes: Rust Lifetime Analyzer (JH)
pdfProposal pdfReport
Vikram Nitin
Session: Session Types (JH)
pdfProposal pdfReport ArchiveFiles
Andrei Coman and Christopher Yoon
Slyce: Dependent Type Interpreter (WQ)
pdfProposal pdfReport ArchiveFiles
Raven Rothkopf and Gregory Schare
blueberry: (SE)
pdfProposal UNRECOGNIZED FILETYPEReport
Wei Qiang
ducksrow: Duck Typing (ES)
pdfProposal pdfReport UNRECOGNIZED FILETYPEFiles
Chang Amery

star My favorites

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