This page contains the syllabus for CS263 - Design and Analysis of Programming Languages, Spring 2007.
| Name | Office | Phone | Office Hours | ||
|
Instructor
|
George Necula
|
783 Soda |
643-1481
|
necula at cs
|
M 1-2pm |
|
Lectures |
1 |
TuTh 1:00-2:30 |
320 Soda Hall |
CS263 is designed to acquaint graduate students with basic ideas behind modern programming language design.
The first part of this graduate-level course focuses on the study of the semantics of a variety of programming language constructs. We will study structural operational semantics as a way to formalize the intended execution and implementation of languages, axiomatic semantics, useful in developing as well as verifying programs, and denotational semantics, whose deep mathematical underpinnings make it the most versatile of all. We will apply these techniques to imperative, functional and object-oriented languages. For this part of the course we will follow the presentation of these topics from Glynn Winskel's "The Formal Semantics of Programming Languages".
The second part of this course covers the basic techniques used in the study of type systems for programming languages. We will start our study with the simply typed lambda calculus and continue with 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. A good reference for this part of the course is John Mitchell's "Foundations for Programming Languages".
The last part of the course covers special topics, occasionally presented by expert invited speakers, drawn from recent research in the semantics of object-oriented languages, abstract interpretation and applications of program semantics in program analysis and verification. This part of the course will also cover several novel applications of ideas from language semantics to system security in the presence of untrusted code, such as proof-carrying code, typed assembly language, Java bytecode verification and typing and type systems for securing the flow of information.
In addition to the topics studies in class, 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.
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. 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 strict. However, your desire to be exposed to this material is very important. In the past a small number of undergraduates have been able to complete the course.
As mentioned in the course description above a number of textbooks will be used in this course. All of these textbooks have been placed on reserve at the library.
|
Recommended |
|
Glynn Winskel, "The Formal Semantics of Programming Languages: An Introduction", MIT Pres, 1993 |
Benjamin Pierce. “Types and Programming Languages”, MIT Press, 2002. |
|
Benjamin Pierce. “Advanced Topics in Types and Programming Languages”, MIT Press, 2005. |
>Copies of the lecture notes will also be made available on the course home page.
There will be 6 homework assignments, mostly mathematical in nature.
The final project is intended to give you hands on experience with the material taught in the course and also to allow you to explore in more depth a topic of your own interest. Acceptable projects can be a programming project, a survey of recent research on some relevant topic, or a small research paper. Everybody must select a project and write a very short (one to two pages) proposal arguing what is expected to be learned from the project (why is it interesting to you) and giving a work schedule. Make sure to budget time for writing a short paper describing the project and for preparing a short (10-15 minute) presentation during the last week of classes. Projects can be individual or in small groups. The due dates for the project proposal and for the final presentation will be announced later.