Notes
The lectures are broken into 11 units, as shown below, which are available online and in PDF form. Sometimes we will use slides for class, which will also be posted here. These pages are also reachable from the calendar.
- Unit 1: Programming Language Basics (Classes 1–1)
Course overview, Classifying programming languages, Steps of compilation - Unit 2: Scheme Basics (Classes 2–3)
Lists, Evaluation, Functions, Symbols, Let - Unit 3: Advanced Scheme (Classes 4–7)
Lambda, Side effects, Mutation, Tail recursion - Unit 4: Scanning and Parsing (Classes 8–11)
Scanning, Top-down parsing, Recursive descent, Shift-reduce - Unit 5: Semantic Analysis (Classes 12–13)
Abstract Syntax Trees, Static Type Checking - Unit 6: Names and scopes (Classes 14–16)
Lifetimes, Nested scopes, Declaration order, Function calls, Lexical scope, Closures - Unit 7: Functions (Classes 17–18)
Parameters, Polymorphism, Macros, Lazy evaluation, Built-ins - Unit 8: Compilation (Classes 19–23)
Intermediate Representations, Three-address code, Single Static Assignment, Basic Blocks, Control Flow, Optimization - Unit 9: Control (Classes 24–25)
For loops, iterators, generators, go-to, generics - Unit 10: Software licenses (Classes 26–26)
Open source, Copyleft - Unit 11: OOP implementation (Classes 27–29)
Fields, Methods, Inheritance, Vtables