17-363/17-663: Programming Language Pragmatics

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

Jonathan Aldrich
aldrich at cs dot cmu dot edu
TCS 422
Office hours: To be announced (or by appointment)
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 for 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.


Date Topic and Slides Additional Reading or Code Assignments Due
Aug 26 Course introduction PLP, chapter 1
Aug 28 Syntax and Lexical Analysis PLP, chapter 2 through 2.2; in-class exercise HW0: Warmup
Aug 30 RecitationIntroduction to Rust
Sep 2 Labor Day - no class
Sep 4 Inductive definitions and proofs 04-formal.pdf; in-class exercise HW1: Lexical analysis
Sep 6 RecitationThe SASyLF Proof Assistant 04-formal-sasylf.pdf
Sep 9 Dynamic semantics: Big-step lecture05-big-step.pdf; in-class exercise
Sep 11 Dynamic semantics: Small-step small-step.pdf; in-class exercise HW2: Inductive proofs
Sep 13 RecitationDynamic semantics practice
Sep 16 Top-Down Parsing PLP section 2.3; in-class exercise
Sep 18 Bottom-Up Parsing in-class exercise and reference sheet HW3: Dynamic Semantics
Sep 20 RecitationParsing implementation
Sep 23 Typing rules 09-typing.pdf; in-class exercise
Sep 25 Type Soundness 10-soundness.pdf; in-class exercise HW4 checkpoint
Sep 27 RecitationStatic Semantics practice
Sep 30 Type Checking PLP chapter 7
Oct 2 Traits and Types in Rust HW4: Parsing
Oct 4 RecitationStatic semantics practice
Oct 7 Mid-semester exam 1
Oct 9 Ownership Checking in Rust
Oct 11 RecitationMidterm discussion HW5: Static semantics
Oct 21 Semantics of Objects PLP chapter 10; Featherweight Java paper
Oct 23 Implementation of Objects PLP chapter 10; in-class exercise HW6 checkpoint
Oct 25 Practice: Advanced Rust Features
Oct 28 Intermediate representations PLP chapter 15; HW6: Typechecking
Oct 30 Assembly Language and Code Generation
Nov 1 Recitation Code generation practice
Nov 4 Dataflow Analysis and Register Allocation
Nov 6 Local Optimization and Correctness PLP chapter 17; Notes on Optimization Correctness; in-class exercise HW7 checkpoint
Nov 8 Recitation Optimization and correctness practice
Nov 11 Global Optimization and SSA HW7: Code generation
Nov 13 Loop optimizations
Nov 15 RecitationProject discussion
Nov 18 Loop optimizations HW8: Translation correctness, Project Proposal
Nov 20 Safe Concurrency in Rust
Nov 22 Recitation2nd midterm review
Nov 25 Midterm exam 2
Nov 27 No class - Thanksgiving break
Nov 29 No RecitationThanksgiving break
Dec 2 Advanced Control Flow PLP chapters 6 and 9; in-class exercise
Dec 4 Programming Languages Research
Dec 6 No Recitation
Finals week Project presentations Project presentations and final deliverables