Course Staff
Lecture Time and Location
- Time: Tu/Th 16:40-18:00
- Location: 1070 Bainer
Course Description
The goal of this course is to introduce students to fundamental ideas
behind the design and analysis of modern programming languages.
In the first part, we focus on the study of different approaches for
specifying the semantics of programming languages. We will study
operational semantics for specifying how programs compute,
axiomatic semantics for verifying programs, and denotational semantics
for specifying what programs compute. We will apply these
techniques to imperative, functional and object-oriented languages. A
good reference for this part of the course is Glynn Winskel's book on
The Formal Semantics of Programming Languages.
In the second part, we focus on the basic techniques used in the study
of type systems for programming languages. We will start with the simply
typed lambda calculus and then move on to more advanced features such as
types for imperative features and exceptions, parametric polymorphism,
existential types for use in abstraction and module systems, and
dependent types. Good references for this part of the course are
Benjamin Pierce's Types and Programming Languages (more
accessible) and John Mitchell's Foundations for Programming
Languages.
If time permits, we may cover additional special topics drawn from
recent research in the semantics of object-oriented languages, abstract
interpretation, program analysis and verification, and novel
applications of ideas from language semantics to system reliability and
security. In addition to the topics covered in the lectures, students
will have the opportunity to consider other related topics of interest
in the form of a course project, most often in the form of a survey of
recent research on a topic of interest.
Prerequisites
The prerequisites for this course are programming and mathematical
experience. The ideal programming experience is practical exposure to
several different programming languages, such as C, ML, Prolog and Java
(eg, ECS 140A). The ideal mathematical experience is knowledge of
mathematical logic and ability to construct rigorous proofs (in
particular by structural induction). None of these prerequisites are
strictly necessary, and your desire to be exposed to this material is
very important.
Textbook
There is one required textbook for the course:
- Glynn Winskel, The Formal Semantics of Programming Languages: An
Introduction, MIT Pres, 1993.
The following two books are useful references:
- John C. Mitchell, Foundations for Programming Languages, MIT
Press, 1996.
- Benjamin Pierce, Types and Programming Languages, MIT Press,
2002.
Useful: Programming
language theory texts online.
In addition, selected papers from the literature may be assigned for
reading.
Homework Assignments
There will be three to four homework assignments, mostly mathematical in
nature.
Exam
There will be an oral final exam around the end of the course to
evaluate each student's understanding of the course material. More
details on this later in the course.
Project
A major component of this course is a class project. All students are
expected to select and complete a course project, either individually or
in groups of two or three. The project can be original research related
in a broad sense to programming semantics or logic. Alternatively, it
can be in the form of a survey paper exploring more in-depth topics
covered in the course or on related topics not covered in the course.
I will suggest a list of potential topics later in the course.
You must select a project and write a one or two pages proposal
describing why what you propose to do is interesting and giving a work
schedule. You will also write a final report describing your project
and prepare a 20-30 minute presentation at the end of the course. The
due dates for the project proposal, final report, and project
presentation will be announced later.
Grading (tentative)
- research project (~50%)
- homework (~10% + ~10%)
- oral final exam (~20)
- class participation (~10%)
Home Page
The home page for this course is here.
All course handouts, announcements, and lecture slides will be posted.