Spring 1999 - Michael Elhadad

**Assignment 1**: Due Tue 22 Dec 98.**Assignment 2**: Due Tue 05 Jan 99.**Assignment 3**: Due Wed 17 Feb 99.

- Update to Chapter 6 of "Essentials of Programming Languages"
- Chapter 13 of "Essentials of Programming Languages" on "Type Inference"
- Threads in SCM (with same fringe)
- Same fringe using threads in C
- Notes on multithreading in C (Part 1) (postscript)
- Notes on multithreading in C (Part 2) (postscript)
- Online supplement
to the book
*Concurrent Programming in Java*by Doug Lea

**Week 1:**Scheme - quick review: recursion, syntactic abstraction. Syntactic description with BNF, Deriving Programs from BNF specifications.**Week 2:**lambda calculus - Free variables vs. bound variables. beta reduction.**Week 3:**alpha reduction. Variable renaming. eta conversion. Reduction strategies. Applicative order. Church-Rosser Theorem.**Week 4:**Recursion in $\lambda$ calculus and the Y-operator. Approaches to Semantics of Programming Languages: operational, structured operational, denotational semantics. Reasoning about programs, program transformations. Language vs. Meta-language. Expressed values vs. Denoted values.**Week 5:**Interpreters: base interpreter. Adding conditionals. Local bindings. Procedures. Variable assignment. (Simple) recursion. Dynamic scope vs. static scope.