This schedule is tentative and subject to change.

Date(s) Topic(s) Homework
Week Day
1 Jan 5
Course overview
Why languages?
[Lecture slides (PowerPoint)]
Micro-Homework 1 (due Fri Jan 7)
Reading: Ullman Ch. 1 - 2.3 (due Wed Jan 7)
Jan 7
ML introduction
History of ML
Values, bindings
Built-in data types
Organization of heap data
Read-eval-print loop programming environment
[Lecture notes (HTML)]
Reading: Ullman Ch. 2.4, 3.2 (due Fri Jan 9)
Jan 9
Functions intro
Pattern matching
[Lecture notes (HTML)]
Micro-Homework 2 (due Wed. Jan 14)
Reading: Ullman Ch. 3.3, 3.4, 5.1-5.4 (due Wed. Jan 14)
2 Jan 12
Patterns ct'd
Language semantics
[Lecture notes (HTML)]
Homework 1: ML programming (due Fri Jan 16)
Homework 1 Solution
Jan 14
Recursive functions; proper tail recursion
Polymorphic types
Higher-order functions; currying
Standard list functions: map/filter/fold
[Lecture notes (HTML)]
Reading: Ullman 4.1, 5.3-5.6, 6.1, 6.2 (due Wed. Jan 21)
Jan 16
Lexical scoping (vs. dynamic scoping)
[Lecture notes (HTML)]
Polymorphic type inference
[Lecture notes (HTML)]
Homework 2: ML functions and polymorphic types (due Fri. Jan 23)
3 Jan 21
User-defined data types and type synonyms
Type synonyms
Monomorphic uses of datatype
[Lecture notes (HTML)]
Reading: Ullman 6.3, 7.2, 7.3 (due Fri. Jan 23)
Jan 23
User-defined data types ct'd
Polymorphic uses of datatype
Mutual recursion
Optional data (option and null)
[Lecture notes (HTML)]
Homework 3: ML programming with data types
Reading: Ullman 8.1-8.3, 8.5 (due Wed. Jan 28)
4 Jan 26
Mutable data (ref)
[Lecture notes (HTML)];
[Lecture slides (PDF)]
Jan 28
Module systems
[Lecture notes (HTML)]
Reading: Ullman 5.2 (due Fri. Jan 30)
Jan 30
Module systems ct'd
Exceptions introduction
[Lecture notes (HTML)]
Project 1: Interpreter in ML (due Fri. Feb 13)
5 Feb 2
Grammars, language specifications, and interpreters
BNF, regular expressions
Project overview
[Lecture notes (HTML)]
[Lecture slides (PDF)]
Feb 4
Interpreter design: case study
Scheme introduction
History of Lisp
Scheme syntax, evaluation, special forms
DrScheme programming environment
[Lecture notes (HTML)]
[Scheme-to-ML cheat sheet (Scheme source)]
Feb 6
Midterm
6 Feb 9
Dynamic typing vs. static typing
[Lecture notes (HTML)]
Feb 11
Dynamic types ct'd
[Lecture notes (HTML)]
Programs as data (quote and quasiquote)
[Lecture notes (HTML)]
Reading: all lecture notes this week: [1], [2], [3], [4] (due Wed. Feb. 18; skim before Fri. Feb 13.)
Feb 13
Continuations and exceptions
[Lecture notes (HTML)]
Homework 4: Scheme programming (due Fri. Feb. 20 Mon. Feb. 23)
Reading: Guzdial Ch. 1-2.4 (due Wed. Feb. 18)
7 Feb 18
Smalltalk introduction
History of Smalltalk/OOP
Objects, classes, messages
Squeak programming environment
[Lecture notes (HTML)]
Micro-Homework 3 (due Mon. Feb. 23)
Reading: Guzdial Ch. 2.5-3.8 (due Fri. Feb. 20)
Reading: The Early History of Smalltalk, Alan C. Kay (due Mon. Mar. 1)
Feb 20
Smalltalk intro ct'd.
Classes and metaclasses
[Lecture notes (HTML)]
Homework 5: Smalltalk programming (due Fri. Feb. 27)
Reading: Guzdial Ch. 4 (due Fri. Feb. 27)
8 Feb 23
Classes and metaclasses ct'd.
Feb 25
ADTs, OOP, and OO library design
Smalltalk collection libraries
[Lecture notes (HTML)]
[Lecture slides (PDF)]
Morphic
[Lecture slides (HTML)]
[Lecture slides (Acrobat ZIP)]
[Lecture slides (PowerPoint)]
Reading: Guzdial 5.3.2-5.5 (no due date, but complements Smalltalk project; focus on 5.3.2.1, 5.4.2, and 5.5).
Nano-homework: Work your way through Morphic tutorial from lecture.
Feb 27
Exploratory programming in Squeak and Morphic
Lecture slides: [HTML], [PDF], [PDF - 4 slides/page], [kpr source]
OO static typing and subtyping
[Lecture notes (HTML)]
Lecture slides: [PDF], [kpr source]
Project 2: Smalltalk Morphic application (see writeup for due dates)
Reading: Pizza paper (due Wed Mar 3), Therac-25 paper (alternate link) (due Mon Mar 8).
9 Mar 1
OO static typing ct'd.
Multiple inheritance
[Lecture notes (HTML)]
Parameter passing
[Lecture notes (HTML)]
Mar 5
Connections between object-oriented and functional programming
Research languages---
Pizza
EML and MultiJava
Mar 3
Scripting, Ruby, and regular expression matching
[Lecture notes (HTML)]
10 Mar 8
Unsafe languages: C
[Lecture notes (HTML)]
Mar 10
Research languages---
Cyclone (guest lecture by Dan Grossman)
[Lecture slides (PDF)]
[code examples directory]
Mar 12
Course wrapup
Finals Mar 17
Final exam (8:30-10:20 a.m.)