This course is designed to introduce students to 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.
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. A good reference for this part of the course is Benjamin Pierce's "Types and Programming Languages".
The last part of the course covers special topics, drawn from recent research in the semantics of object-oriented languages, abstract interpretation, symbolic evaluation, and applications of program semantics in program analysis and verification.
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.
Pre-requisites
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. If you are an undergraduate considering taking this course, please contact the course instructor.
The discussion group for this class is hosted by Piazza at:
The group should be the first place you go for support, so that staff and students can cooperate to answer your questions, and so other students with the same questions can get answers. You can contact staff directly as described below if you have a private concern or are not comfortable discussing your question publicly.
The following textbooks contains useful related material:
There will be a small number of 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 20 minute presentation during the last week of classes. Projects can be individual or in groups of two. The due dates for the project proposal and for the final presentation will be announced later.
Late Policy
You will lose 0.5% of the score for an assignment, for each hour it is late.
There will be one final take-home exam.
Regrade requests will only be accepted for programming assignments and exams. In either case, all regrade requests must be received within one week upon receiving your score.
The grades will be curved based on scores computed as follows:
It is expected that all students understand University policies on academic honesty. Cheating on assignments or exams is very serious and will not be tolerated. All cases will be dealt through the University’s Office of Student Judicial Affairs. In this course, we will use a variation of the standard policy. In this class, it is permissible to talk to other students about assignments, to discuss particular solutions, and even to receive partial solutions (including code) from others. However, all assistance and cooperation must be cited in the assignment write-up. If you receive any assistance from anyone other than course staff or your partner on an assignment, you must acknowledge in the write-up for that assignment who gave assistance and what assistance was given. Grading will take into account how much help a student received from others (the more help, the lower the grade). Failure to acknowledge sources is plagiarism and will be treated as a serious breach of academic honesty. No assistance may be given or received on exams.
You should know that sophisticated plagiarism detection software may be used on the programming assignments.