15-812(A): SEMANTICS OF PROGRMMING LANGUAGES
INSTRUCTOR: Stephen Brookes
UNITS: 12
SPRING 2003

DESCRIPTION:
This course introduces foundational concepts and techniques of program-ming language semantics. We demonstrate the utility of a mathematical approach to programming languages in answering questions about program correctness, the pro’s and con’s of various languages, compiler correctness, and other practical issues. We focus on two of the most successful styles of semantic description: denotational and operational. We deal with small “core” languages, each chosen to illustrate a specific paradigm. Our approach is incremental, studying each feature in as simple a setting as possible. We use semantics to prove properties of a language, to analyze programs, to de-sign correct programs, to prove correctness of compiler optimizations, and to prove general laws of program equivalence.

TOPICS:
1. Introduction to semantics: denotational and operational, referential transparency, criteria for choosing models
2. Sequential imperative programs: state transformations, partial and to-tal correctness, traces and runtime
3. Machine language: jumps and continuations, compiling sequential pro-grams, correctness of compiler optimizations
4. Parallel programming: data ow networks, shared-memory parallelism, communicating processes, safety and liveness, fair execution
5. Functional programs: types and polymorphism, call-by-value, direct-and continuation-style semantics

REQUIREMENTS:
This is a starred course for CS graduate students and may be used to fulfill part of the course requirements in the CS Ph.D. program. Graduate students in other departments, and advanced undergraduates, can take the course with permission of the instructor. The course is 12 units.

Grading will be based on homeworks and exams. Homework will involve written work. Students are encouraged to form study groups, but each stu-dent must do the homeworks and exams individually.

READING:
A full set of lecture notes will be handed out during the course and copies will be placed in the course blackboard site. Check in frequently to

www.cmu.edu/blackboard

for updates and announcements.

The following texts are suggested for background reading, although their notation is not necessarily consistent with ours:

1. Reynolds, Theories of Programming Languages, Cambridge University Press, ISBN 0-521-59414-6.

2. Winskel, The Formal Semantics of Programming Languages: An Intro-duction, MIT Press, ISBN 0-262-23169-7.