CAS CS 320: Concepts of Programming Languages

(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

Course Introduction

OCP (1.1, 1.2, 1.3, 2.1, 2.2, 2.3)

Assignment 0

Wed 1/22

Lab 1: Installation Party

Thu 1/23

Beginning Ocaml I: The Basics

OCP (2.2, 2.4, 2.6, 2.7)

Assignment 1 (A0 due)

Tue 1/28

Beginning Ocaml II: Unions and Products

OCP (3.2, 3.4, 3.9)

Wed 1/29

Lab 2: Thinking Recursively

Thu 1/30

Beginning OCaml III: Lists, Tail Recursion

OCP (3.1, 3.5, 3.7, 3.8)

Assignment 2 (A1 due)

Tue 2/4

Algebraic Data Types I: The Basics

OCP (3.6, 3.9, 3.11, 8.3)

Wed 2/5

Lab 3: TSV Reader

Thu 2/6

Algebraic Data Types II: Polymorphism

Assignment 3 (A2 due)

Tue 2/11

Higher Order Programming I: Maps and Filters

OCP (4.1, 4.2, 4.3, 4.7)

Wed 2/12

Lab 4: S-Expressions

Thu 2/13

Higher Order Programming II: Folds

OCP (4.4, 4.5)

Assignment 4 (A3 due)

Tue 2/18

No Lecture (Substitute Monday)

No Lecture (Substitute Monday)

Wed 2/19

Lab 5: When2meet

Thu 2/20

Intermediate OCaml I: Error Handling, Testing

OCP (3.3, 3.10)

Assignment 5 (A4 due)

Tue 2/25

Intermediate OCaml II: Modules

OCP (5.1, 5.2, 5.3, 5.4, 5.5)

Wed 2/26

Lab 6: Midterm Review

Thu 2/27

Midterm

Midterm

Tue 3/4

Parsing I: Formal Grammar

PL@BU (1, 2)

Wed 3/5

Week 7 Lab: A Calculator

Thu 3/6

Parsing II: Lexing, Parsing Ambiguity

PL@BU 2

Assignment 6 (A5 due)

3/10-3/14

No Class (Spring Recess)

No Class (Spring Recess)

Tue 3/18

Parsing III: Lexer/Parser Generators

OCP 9.2, PL@BU 3

Wed 3/19

Week 8 Lab: Formal Grammar Worksheet

Thu 3/20

Formal Semantics I: Operational Semantics

OCP 9.1

Mini-Project 1 (A6 due)

Tue 3/25

Formal Semantics II: The Substitution Model

OCP 9.3

Wed 3/26

Week 9 Lab: Operational Semantics Worksheet

Thu 3/27

Formal Semantics III: Variables, Scope, Closures

OCP 9.4

(MP1 check-in due)

Tue 4/1

Formal Semantics IV: The Environment Model

OCP 9.4

Wed 4/2

Week 10 Lab: An Imperative Language

Thu 4/3

Type Checking I: The Simply-Typed Lambda Calculus

OCP 9.5

Mini-Project 2 (MP1 due)

Tue 4/8

Type Checking II: Progress and Preservation

OCP 9.5

Wed 4/9

Week 11 Lab: Closures Worksheet

Thu 4/10

Type Checking III: Extended Example

OCP 9.5

(MP2 check-in due)

Tue 4/15

Type Inference I: Hindley-Milner (Light)

OCP 9.6

Wed 4/16

Week 12 Lab: Typing Derivation Worksheet

Thu 4/17

Type Inference II: Unification

OCP 9.6

Mini-Project 3 (MP2 due)

Tue 4/22

Type Inference III: Constraint-Based Inference

OCP 9.6

Wed 4/23

Lab 13: Logic Programming

Thu 4/24

Type Inference IV: Extended Example

OCP 9.6

(MP3 check-in due)

Tue 4/29

Compilation I: Stack-Based Languages

Wed 4/30

Lab 14: Type Inference Worksheet

Thu 5/1

Compilation II: Byte-Code Interpretion

(MP3 due)

TBD

Final Exam