This course provides a thorough introduction to fundamental concepts involved in the design of programming languages. It is not a survey course of existing languages; rather, it explores general issues in programming language methodology through the study and implementation of interpreters. We will see how a very high-level, almost mathematical, specification of the semantics of a language can be used to systematically derive a low-level implementation for it, almost at the assembly-language level, through the application of a series of correctness-preserving program transformations. Along the way, we will become acquainted with the lambda calculus (the mathematical basis of modern programming language theory), representation independence, syntactic abstraction, continuations and continuation-passing style, lazy evaluation, nondeterministic evaluation, and, if time permits, compiler derivation and logic programming. Throughout the course, we will use the Scheme programming language as our meta-language for exploring these issues in a precise, analytical fashion---in much the same way that the language of mathematics is used to precisely describe and analyze phenomena in the natural sciences. Our great advantage over mathematics, however, will be the ability to directly test out our ideas about languages, expressed clearly and unambiguously in the form of Scheme programs, by running them on the computer and observing the results.
Week 1 (9/2): Review of Scheme and Recursion (Reading: EOPL 1.1-2.2, 3.2-3.3)
Week 2 (9/7-9/9): Static Properties of Variables; Records and Data Abstraction (Reading: EOPL 2.3)
ADD/DROP PERIOD ENDS Wednesday 9/15
Week 3 (9/14-9/16): The Lambda Calculus (Reading: EOPL Chapter 4)
Weeks 4-5 (9/21-9/28): Interpreters (Reading: EOPL Chapter 5)
Weeks 5-6 (9/30-10/5): Continuation-Passing Style (Reading: EOPL Chapter 8)
EXAM 1 (around October 5-7)
* * * F A L L * * * B R E A K * * *
LAST DAY TO WITHDRAW Friday, 10/22
Weeks 7-8 (10/19-10/28): Continuation-Passing Interpreters (Reading: EOPL Chapter 9)
Weeks 9-10 (11/2-11/11): Imperative Form and Stack Architecture (Reading: EOPL Chapter 10)
Week 11 (11/16-11/18): Lazy Evaluation
EXAM 2: (around November 16-18)
* * * T H A N K S G I V I N G * * * B R E A K * * *
Weeks 12-14 (11/23-12/9): Nondeterministic Evaluation, Compiler
Derivation, Logic Programming, other topics if time permits (Reading:
TBA)