(UNDER CONSTRUCTION) 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.
See the following links for more information.
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 |
---|---|---|---|
Tue 1/21 | Assignment 0 | ||
Wed 1/22 | |||
Thu 1/23 | Assignment 1 (A0 due) | ||
Tue 1/28 | |||
Wed 1/29 | Lab 2: Thinking Recursively | ||
Thu 1/30 | Assignment 2 (A1 due) | ||
Tue 2/4 | |||
Wed 2/5 | Lab 3: TSV Reader | ||
Thu 2/6 | Assignment 3 (A2 due) | ||
Tue 2/11 | |||
Wed 2/12 | Lab 4: S-Expressions | ||
Thu 2/13 | Assignment 4 (A3 due) | ||
Tue 2/18 | No Lecture (Substitute Monday) | No Lecture (Substitute Monday) | |
Wed 2/19 | Lab 5: When2meet | ||
Thu 2/20 | Assignment 5 (A4 due) | ||
Tue 2/25 | |||
Wed 2/26 | Lab 6: Midterm Review | ||
Thu 2/27 | Midterm | Midterm | |
Tue 3/4 | |||
Wed 3/5 | Week 7 Lab: A Calculator | ||
Thu 3/6 | PL@BU 2 | Assignment 6 (A5 due) | |
3/10-3/14 | No Class (Spring Recess) | No Class (Spring Recess) | |
Tue 3/18 | |||
Wed 3/19 | Week 8 Lab: Formal Grammar Worksheet | ||
Thu 3/20 | OCP 9.1 | Mini-Project 1 (A6 due) | |
Tue 3/25 | OCP 9.3 | ||
Wed 3/26 | Week 9 Lab: Operational Semantics Worksheet | ||
Thu 3/27 | OCP 9.4 | (MP1 check-in due) | |
Tue 4/1 | OCP 9.4 | ||
Wed 4/2 | Week 10 Lab: An Imperative Language | ||
Thu 4/3 | OCP 9.5 | Mini-Project 2 (MP1 due) | |
Tue 4/8 | OCP 9.5 | ||
Wed 4/9 | Week 11 Lab: Closures Worksheet | ||
Thu 4/10 | OCP 9.5 | (MP2 check-in due) | |
Tue 4/15 | OCP 9.6 | ||
Wed 4/16 | Week 12 Lab: Typing Derivation Worksheet | ||
Thu 4/17 | OCP 9.6 | Mini-Project 3 (MP2 due) | |
Tue 4/22 | OCP 9.6 | ||
Wed 4/23 | Lab 13: Logic Programming | ||
Thu 4/24 | OCP 9.6 | (MP3 check-in due) | |
Tue 4/29 | |||
Wed 4/30 | Lab 14: Type Inference Worksheet | ||
Thu 5/1 | (MP3 due) | ||
TBD | Final Exam |