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.