ECS 240, Winter 2017
Formal Semantics of Programming Languages
Course DescriptionThe 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 and axiomatic semantics for verifying programs. 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.
We will also cover additional special topics drawn from recent research in 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.
PrerequisitesThe 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.
TextbookThe lectures will be supplemented with selected classical and recent research papers. We do not have any required textbook for the course. The following books are useful references:
Homework AssignmentsThere will be three to four homework assignments, mostly mathematical in nature.
ExamThere will be a take-home final toward the end of the quarter (most likely during the last week of classes) to evaluate each student's understanding of the course material. More details to be announced later in the course.
ProjectA major component of this course is a class project. All students are expected to select and complete a course project (more information later). Ideally, the project is original research related in a broad sense to programming semantics or logic. I will suggest some 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 15-20 minute presentation at the end of the course. The due dates for the project proposal, final report, and project presentation will be announced later.