Date | Topic | Reading |
---|---|---|
2/2 | Desiderata; variables, types | Finkel 1.1, 1.2, 1.3.1 [buzzwords] |
2/4 | Expressions; control constructs | Finkel 1.3.2 |
2/6 | Procedures; parameters | Finkel 1.3.3 |
2/9 | Procedures, parameters | Finkel 1.3.4 |
2/11 | Block structure; runtime store organization | Finkel 1.3.5 |
2/13 | Types | Finkel 3.1-3.3, 3.7 [buzzwords] |
2/16 | ML | Finkel 3.7, Ullman 1,2 |
2/18 | Subtypes; ADT's in ML | Finkel 3.3, 3.5, 3.7, Ullman 3,6, 8.1-8.2 |
2/20 | ADT's and modules; 1st-class functions | Finkel 3.5, 3.6, Ullman 5 |
2/23 | Polymorphism; higher-order functions | Finkel 3.7.6-3.7.8, Ullman 5 |
2/25 | Lambda calculus | Finkel 4.5, Hindley 1, notes |
2/27 | Fixed points | Hindley 3,4, notes |
3/2 | Computability | Hindley 5 |
3/4 | Lazy Evaluation | Finkel 3.8 |
3/6 | Lazy; Closures | Notes; Finkel 1.3.4, 4.1.6, Appel 15 |
3/9 | Object-Oriented Programming | Finkel 5, Arnold |
3/11 | Object-Oriented Programming | Finkel 5, Arnold |
3/13 | Take-Home Midterm Exam Due | Covers through March 9th |
Spring Break | ||
3/23 | Compiling OOP | Appel 14 |
3/25 | Garbage Collection | Appel 13 |
3/27 | Hoare's logic | Finkel 10.1, 10.2 |
3/30 | Denotational Semantics | Finkel 10.3 |
4/1 | Denotational Semantics | Finkel 10.3, notes |
4/3 | Denotational Semantics | Finkel 10.3 |
4/6 | Programs as data | Finkel 4.1, 9.1.8 |
4/8 | Static vs. dynamic scope | Finkel 4.1.6-4.1.7 |
4/10 | Exception handling | Finkel 2.1, Ullman 5.2, Arnold 7 |
4/13 | Coroutines | Finkel 2.2 |
4/15 | First-class continuations | Coroutine example |
4/17 | Concurrent Programming | Finkel 7.1,7.2, Arnold 9 |
4/20 | Shared variables | Finkel 7.2, Arnold 9 |
4/22 | Communicating Sequential Processes | Finkel 7.5.1, |
4/24 | Concurrent ML | Reppy 3, CML sig |
4/27 | Concurrent ML | Reppy 3 |
4/29 | Modularity in ML | Ullman 8 |
5/1 | Modularity in Java | Arnold 3, 4, 10 |
Reading period | ||
5/19 | Take-Home Final Exam Due |
Advanced Programming Language Design, by Raphael Finkel, Addison Wesley, 1996.
Elements of ML Programming, 2nd edition, by Jeffrey D. Ullman, Prentice Hall, 1998.
Introduction to Combinators and Lambda-Calculus, by J. Roger Hindley and Jonathan P. Seldin, Cambridge, 1986.
Modern Compiler Implementation in ML, by Andrew W. Appel, Cambridge, 1998. The Java Programming Language, by Ken Arnold and James Gosling, Addison-Wesley, 1996.