Programming Languages

Spring 2020

Below is the schedule of topics and deadlines for the course. The links will become active as the semester progresses. The schedule of topics is subject to change. If any deadlines change, we will let you know!
Week Date Topic Assignment / Exam
Week 1 Monday, January 20 No class Martin Luther King, Jr. Day
  • HW 0: Warmup due Sunday, January 26 at 11:59pm
Monday, January 20 No lab
Wednesday, January 22 Class: Introduction Welcome! The Why, What, and How of PLs
Week 2 Monday, January 27 Class: Lambda Calculus 1 Introduction, Encodings
Monday, January 27 Lab: lc
Wednesday, January 29 Class: Lambda Calculus 2 Computing Free Vars, Sets, Recursion (Y). S-K Combinators
Week 3 Monday, February 03 Class: Haskell 1 Lambda Calculus + Syntactic Sugar + Types + Lazy Evaluation = Haskell Language
  • HW 2: Haskell due Sunday, February 09 at 11:59pm
Monday, February 03 Lab: GHCI
Wednesday, February 05 Class: Haskell 2 Types & Typeclasses
Week 4 Monday, February 10 Class: Programs as Structured Data Datatypes review. Concrete vs Abstract Syntax. Representing the Lambda Calculus
Monday, February 10 Lab: Interpreters
Wednesday, February 12 Class: Interpreters 1 Adding features and syntactic sugar to a simple programming language
Week 5 Monday, February 17 Class: Interpreters 2 Environments, Closures
Monday, February 17 Lab: pic & PS
Wednesday, February 19 Class: Introduction to Parsing Tokenization, Hand-Written Recursive Descent
Week 6 Monday, February 24 Class: Building a Parsing Library 1 Primitive parsers and parser combinators
Monday, February 24 Lab: Parsing
Wednesday, February 26 Class: Building a Parsing Library 2 More parser combinators
Week 7 Monday, March 02 Class: Monads 1 Abstracting from parsing to Functor, Alternative, and Monad
  • Exam: Midterm available Wednesday, March 04
    due Monday, March 09 at 9:00am
Monday, March 02 Lab: Monads
Wednesday, March 04 Class: Monads 2 Applicative, do notation, Side effects, Referential transparency
Week 8 Monday, March 09 Class: Types 1 Introduction to Types & Type Systems
Monday, March 09 Lab: C pre-processor
Wednesday, March 11 No class
Spring Break
Week 9 Monday, March 23 No class
Monday, March 23 No lab
Wednesday, March 25 No class
Week 10 Monday, March 30 Class: Types review A recap from before Spring Break, A simple type system, Subtyping
Monday, March 30 No lab
Wednesday, April 01 Class: Types 2 Subtyping continued, Dynamic dispatch
Week 11 Monday, April 06 Class: Dispatch Coercion vs Overloading vs Genericity vs Dynamic Dispatch
  • HW 7: Moses due Sunday, April 12 at 11:59pm
Monday, April 06 Lab: Moses
Wednesday, April 08 Class: Objects without Classes JavaScript, Prototype-based OOP
Week 12 Monday, April 13 Class: Introduction to Control Flow Order of effects, Alternative control-flow mechanisms, Continuations
Monday, April 13 Lab: Visitor pattern
Wednesday, April 15 Class: Abstracting Iteration Generators and Coroutines
Week 13 Monday, April 20 Class: Concurrency Coroutines and Concurrency via Cooperative Threading, Semaphores
Monday, April 20 Lab: script and Lua
Wednesday, April 22 Class: Asynchrony vs Concurrency vs Simultaneity vs Parallelism Monitors, Preemption, Data Races and Memory Ordering, Amdahl's Law
Week 14 Monday, April 27 Class: Parallelism Worldview ≠ Concurrency Worldview Coordination vs. Speedup
  • Exam: Final available Sunday, May 03
    due Tuesday, May 12 at noon, Pacific
Monday, April 27 No lab
Wednesday, April 29 Class: Conclusion Review and wrap-up.