17-363/17-663: Programming Language Pragmatics

Class M/W 9:30 - 10:50 a.m. in GHC 4215
Recitation F 10:00 - 10:50 a.m. in GHC 4215
Fall 2025
12 units

Jonathan Aldrich
aldrich at cs dot cmu dot edu
TCS 422
Office hour: Friday 4pm in TCS 422
For appointments outside of office hours, email the instructor.

Course Description

This course provides a broad and pragmatic foundation in the most basic tool of the programmer: programming languages. It starts with the fundamentals of syntax, parsing, and binding, the core structural concepts in programming languages. The course will then cover program semantics and type systems, and students will learn to relate them with a type soundness theorem. Finally, a coverage of intermediate optimization and code generation offers the opportunity to discuss both producing efficient code and reasoning about the correctness of program transformations. Assignments involve a combination of tool-assisted formal reasoning and proofs about programming languages, and implementing these language constructs in a compiler.

New since 2024: a Rust emphasis! 17-363 is being revised to center the Rust programming language. Rust is fast, safe, and growing quickly in popularity in industry--it's like the next "systems" language in many organizations. In addition to the core material on programming languages described below, you'll learn about Rust features like ownership, traits, safe concurrency. The implementation assignments in the course (about 4 of 8) will involve building a compiler in Rust, so you'll get plenty of hands-on experience with the language.

Prerequisites. Programming maturity and knowledge of reasoning about programs equivalent to passing 15-150, and mathematical maturity equivalent to passing either 15-251 or 21-228). Students with substantial math and programming experience who have not satisfied the specific prerequisites can contact the instructor for permission to enroll.

Requirements Satisfied.This course fulfills the Logic and Languages constrained elective category for the Computer Science major.

Why take this course?

How does this course compare to CMU's other PL/compilers courses?

First of all, CMU has an amazing selection of courses in this area-you can't go wrong! But this course has some differences that make it a particularly great match for some students:

Course Syllabus and Policies

The syllabus covers course learning objectives, supplemental textbooks, assessments, late work policy, and policies.

Schedule

Date Topic and Slides Additional Reading or Code Assignments Due
Aug 25 Course Introduction PLP, chapter 1; handout
Aug 27 Names, Scopes and Bindings PLP, chapter 3
Aug 29 RecitationIntroduction to Rust HW0: Adder
Sep 1 Labor Day - no class
Sep 3 Inductive definitions and proofs 04-formal.pdf; in-class exercise
Sep 5 RecitationThe SASyLF Proof Assistant 04-formal-sasylf.pdf HW1: Boa
Sep 8 Dynamic semantics: Big-step lecture05-big-step.pdf; in-class exercise
Sep 10 Dynamic semantics: Small-step small-step.pdf; in-class exercise and solution
Sep 12 RecitationDynamic semantics practice HW2: Inductive proofs
Sep 15 Control Flow PLP chapter 6
Sep 17 Semantic Analysis PLP chapter 4, lecture notes on typing
Sep 19 RecitationCompiling control flow HW3: Dynamic Semantics
Sep 22/td> Ownership in Rust
Sep 24 Functions
Sep 26 Recitation HW4: Cobra
Sep 29 Type Soundness lecture notes on soundness
Oct 1 Type Checking PLP chapter 7
Oct 3 RecitationStatic semantics practice HW5: Diamondback
Oct 6 Mid-semester exam 1
Oct 8 Allocation and composite types
Oct 10 No recitation
Oct 20 Garbage collection
Oct 22 Local optimization and correctness PLP chapter 17; value num example soln; in-class exercise soln HW6: Static semantics
Oct 24 Optimization and correctness practice
Oct 27 Lexical analysis PLP chapter 2
Oct 29 Dataflow analysis PLP chapter 17; example 1 soln, example 2 soln, in-class exercise solutions
Oct 31 Dataflow analysis practice HW7: Egg Eater
Nov 3 Top-down parsing PLP chapter 2
Nov 5 Bottom-up (LR) Parsing PLP chapter 2, in-class exercise, exercise reference sheet
Nov 7 RecitationParsing HW8: Translation correctness
Nov 10 Instruction Scheduling and Register Allocation
Nov 12 Object-oriented programming and traits in Rust
Nov 14 Recitation2nd midterm review HW9: garbage collection or lexing/parsing
Nov 17 Functional programming and error handling in Rust Project Proposal
Nov 19 Midterm exam 2
Nov 21 RecitationProject check-in
Nov 24 Packages, Crates, and Macros in Rust
Nov 26 No class - Thanksgiving break
Nov 28 No RecitationThanksgiving break
Dec 1 Concurrency in Rust
Dec 3 Programming Languages Research
Dec 5 Project help/advice
Finals week Project presentations Project presentations and final deliverables