CAS CS 320 is a course about programming languages, particularly the design and implementation of programming languages. In this course, we take up the programming language as an object of formal study. This course is not about how to program, though the principles we cover are generally useful for writing and reasoning about programs.
The first part of the course is on functional programming in OCaml, based on CS 3110: Data Structures and Functional Programming at Cornell University and its associated textbook (referred to as OCP below). Its topics include algebraic data types, higher-order functions, and polymorphism. It's during this part that we learn to think functionally, to view programs not as sequences of commands manipulating global state, but as compositions of functions which deconstruct and reorient data.
In the second part of the course we implement several interpreters for various fragments of OCaml; that is, we will write OCaml programs which execute OCaml programs. The topics covered include parsing, operational semantics, variable scope and binding, type checking and type inference. By the end of the course, you'll be able to execute some of the simpler programs we wrote in the first part of the course using your own interpreter.
The following table contains a complete schedule for the semester. You can click on any of the topics, to see the corresponding reading, any assignment to see the assignment, and any lab to see the lab.
Date | Topic | Reading | Assignments |
---|---|---|---|
9/2 | Assignment 0 | ||
9/3 | Lab 1: Installation Party | ||
9/4 | Assignment 1 | ||
9/9 | |||
9/10 | Lab 2: Thinking Recursively | ||
9/11 | Assignment 2 (A1 due) | ||
9/16 | |||
9/17 | Lab 3: TSV Reader | ||
9/18 | Assignment 3 (A2 due) | ||
9/23 | |||
9/24 | Lab 4: S-Expressions | ||
9/25 | Assignment 4 (A3 due) | ||
9/30 | |||
10/1 | Lab 5: When2meet | ||
10/2 | Assignment 5 (A4 due) | ||
10/7 | |||
10/8 | Lab 6: Formal Grammar Worksheet | ||
10/9 | PL@BU 2 | Practice Midterm (A5 due) | |
10/14 | No Lecture (Substitute Monday) | ||
10/15 | Lab 7: Midterm Review | ||
10/16 | Midterm | Assignment 6 | |
10/21 | |||
10/22 | Lab 8: S-Expressions Again | ||
10/23 | OCP 9.1 | Mini-Project 1 (A6 due) | |
10/28 | OCP 9.3 | ||
10/29 | Lab 9: Operational Semantics Worksheet | ||
10/30 | OCP 9.4 | (MP1 check-in due) | |
11/4 | OCP 9.4 | ||
11/5 | Lab 10: An Imperative Language | ||
11/6 | OCP 9.5 | Mini-Project 2 (MP1 due) | |
11/11 | OCP 9.5 | ||
11/12 | Lab 11: Closures Worksheet | ||
11/13 | OCP 9.5 | (MP2 check-in due) | |
11/18 | OCP 9.6 | ||
11/19 | Lab 12: Polymorphism Worksheet | ||
11/20 | OCP 9.6 | Mini-Project 3 (MP2 due) | |
11/25 | OCP 9.6 | ||
11/26 | No Lab (Thanksgiving Recess) | ||
11/27 | No Lecture (Thanksgiving Recess) | ||
12/2 | OCP 9.6 | ||
12/3 | Lab 14: Type Inference Worksheet | ||
12/4 | (MP3 check-in due) | ||
12/9 | |||
12/10 | Lab 15: Final Exam Review | (MP3 due) | |
TBD | Final Exam |