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 2017.
Course info
- Lectures: Mon & Wed 4:30pm-5:50pm,
Skilling Auditorium - Links: Gradescope, Piazza, feedback
Instructors
Course assistants
Calendar
Schedule
Lectures | Assignments | Readings |
---|---|---|
Week 1: September 24 | ||
Lecture 1.1 (Mon): Introduction ( slides , notes ) | A Brief, Incomplete, and Mostly Wrong History of Programming Languages |
|
Lecture 1.2 (Wed): Lambda calculus ( notes ) | Assignment 1 out |
TAPL - Chapter 3 |
Week 2: October 1 | ||
Lecture 2.1 (Mon): Type systems ( notes ) | TAPL - Chapter 9 |
|
Lecture 2.2 (Wed): Algebraic data types ( notes ) | Assignment 1 due, Assignment 2 out |
TAPL - Chapter 11 |
Week 3: October 8 | ||
Lecture 3.1 (Mon): Recursion ( notes ) | TAPL - Chapter 20, 21 |
|
Lecture 3.2 (Wed): Polymorphism ( notes ) | Assignment 2 due, Assignment 3 out |
TAPL - Chapter 23 |
Week 4: October 15 | ||
Lecture 4.1 (Mon): Stack machines and assembly ( notes ) | WebAssembly Reference Manual |
|
Lecture 4.2 (Wed): WebAssembly semantics ( notes ) | Assignment 3 due, Assignment 4 out |
|
Week 5: October 22 | ||
Lecture 5.1 (Mon): Memory safety in Rust ( notes ) | The Rust Book - Understanding Ownership |
|
Lecture 5.2 (Wed): Traits ( notes ) | Assignment 4 due, Assignment 5 out |
|
Week 6: October 29 | ||
Lecture 6.1 (Mon): Smart pointers ( notes ) | ||
Lecture 6.2 (Wed): Concurrency and data races ( notes ) | Assignment 5 due, Assignment 6 out |
The Rust Book - Fearless Concurrency |
Week 7: November 5 | ||
Lecture 7.1 (Mon): Guest lecture - Sergio Benitez, Stanford ( notes ) | Typestates in Rust |
|
Lecture 7.2 (Wed): Session types ( notes ) | Assignment 6 due, Assignment 7 out |
|
Week 8: November 12 | ||
Lecture 8.1 (Mon): Dynamic typing ( notes ) | ||
Lecture 8.2 (Wed): Object systems ( notes ) | Assignment 7 due, Assignment 8 out |
Lua PIL - Object-Oriented Programming |
November 19 | ||
No class for Thanksgiving! | ||
Week 9: November 26 | ||
Lecture 9.1 (Mon): Performance ( slides ) | ||
Lecture 9.2 (Wed): The future of programming languages ( slides ) | Assignment 8 due, final released |
|
Week 10: December 3 | ||
Lecture 10.1 (Mon): Guest lecture - Yaron Minsky, Jane Street Capital | ||
Lecture 10.2 (Wed): Guest lecture - Jean Yang, CMU | ||
Week 11: December 10 | ||
Friday, December 14: Final due at 6:30pm |