Project-related deadlines are shown in red. Note that that there will be no extensions for projects!

Week 1: Intro and C++

Week 2: C++ Pointers (Kris gone)

Week 3: C++ Classes, Inheritance, and VTables

  • Monday: Memory management and polymorphism
  • Wednesday: Virtual method tables
  • Slides in Keynote and PDF.

Week 4: Assembly Lanaguage

  • Monday: Assembly Language Intro
  • Wednesday: Kris gone
  • Slides in Keynote and PDF.

Week 5: Calling Conventions in Assembly, Stack Smashing

  • Monday: Functions and Calling Conventions
  • Wednesday: Stack Smashing and Buffer Overflow Exploits

Week 6: Attack Injection and Intro to Racket

  • Monday: Attack Injection
  • Wednesday: Intro to Racket

Week 7: Formal Semantics and Racket

  • Monday: Big-Step Semantics of Arithmetic
  • Wednesday: Lambda Calculus

Week 8: Racket Programming

  • Monday: S-Expressions, Immutability
  • Wednesday: Higher-Order Functions (map, fold, etc…)

Week 9: Semantics in Racket

  • Monday: Lambda Calculus Implementation in Racket
  • Wednesday: Big-Step semantics for Lambda Calculus

Week 10: Church Encodings and Continuations

  • Monday: Church Encoding Lambda Calculus
  • Wednesday: Continuations and call/cc

Week 11: Foundations of Interpreters

  • Monday: Implementing continuations, stack-passing
  • Thursday: Stack passing and CPS

Week 12: Closure Conversion

  • Monday: Closure Conversion–top down
  • Wednesday: Closure Conversion–bottom up

Week 13: Contracts and Types

  • Monday: Contracts, Higher-Order Contracts
  • Wednesday: Checking Higher-Order Contracts

Week 14: Type Systems

  • Monday: Simply-Typed Lambda Calculus
  • Wednesday: Type Inference for STLC