Course summary

CS 242 explores models of computation, both old, like functional programming with the lambda calculus (circa 1930), and new, like memory-safe systems programming with Rust (circa 2010). The study of programming languages is equal parts systems and theory, looking at how a rigorous understanding of the syntax, structure, and semantics of computation enables formal reasoning about the behavior and properties of complex real-world systems. In light of today’s Cambrian explosion of new programming languages, this course also seeks to provide a conceptual clarity on how to compare and contrast the multitude of programming languages, models, and paradigms in the modern programming landscape. See the schedule below for full topic list. Prerequisites: 103, 110.

Previous iterations of this course: Fall 2018, Fall 2017.

For more on this course’s design, read my SNAPL’19 paper:
“From Theory to Systems: A Grounded Approach to Programming Language Education”

Course info

Instructor

Will Crichton

Course assistants

Jayden Navarro
Danny Semeniuta
Sicheng Zeng
Shrey Gupta

Calendar

Schedule

Lectures Assignments Readings
Week 1: September 23
Lecture 1.1 (Mon): Introduction ( slides )

Can programming be liberated from the von Neumann style?

Lecture 1.2 (Wed): Syntax and semantics ( notes )

Assignment 1 out

Types and Programming Languages (TAPL) Ch. 3

Week 2: September 30
Lecture 2.1 (Mon): Lambda calculus ( notes )

TAPL Ch. 5

Lecture 2.2 (Wed): Type systems ( notes )

Assignment 1 due, Assignment 2 out

TAPL Ch. 8-9

Week 3: October 7
Lecture 3.1 (Mon): Functional basics ( notes )

TAPL Ch. 9
Real World OCaml - Guided Tour

Lecture 3.2 (Wed): Algebraic data types ( notes )

Assignment 2 due, Assignment 3 out

TAPL Ch. 11
The algebra (and calculus!) of algebraic data types
Real World OCaml - Variants

Week 4: October 14
Lecture 4.1 (Mon): Parametric types ( notes )

TAPL Ch. 20, 23

Lecture 4.2 (Wed): Modules [no lecture!] ( notes )

Assignment 3 due, Assignment 4 out

TAPL Ch. 24

Week 5: October 21
Lecture 5.1 (Mon): Mutability ( notes )

WebAssembly Specification
Bringing the Web up to Speed with WebAssembly

Lecture 5.2 (Wed): Control flow: branches ( notes )

Assignment 4 due, Assignment 5 out

Week 6: October 28
Lecture 6.1 (Mon): Control flow: functions ( notes )
Lecture 6.2 (Wed): Affine types

Assignment 5 due, Assignment 6 out

The Rust Book - Understanding Ownership

Week 7: November 4
Lecture 7.1 (Mon): Traits

The Rust Book - Traits

Lecture 7.2 (Wed): Smart pointers

Assignment 6 due, Assignment 7 out

The Rust Book - Smart Pointers

Week 8: November 11
Lecture 8.1 (Mon): Concurrency

The Rust Book - Fearless Concurrency

Lecture 8.2 (Wed): Typestate

Assignment 7 due, Assignment 8 out

Typestates in Rust
A hammer you can only hold by the handle

Week 9: November 18
Lecture 9.1 (Mon): Session types

Session Types for Rust

Lecture 9.2 (Wed):

Assignment 8 due, final released

November 25
No class for Thanksgiving!
Week 10: December 2
Lecture 10.1 (Mon):
Lecture 10.2 (Wed):
Week 11: December 9
Friday, December 13: Final due at 6:30pm