Announcement 11-Mar: The term paper has been released. It is due on the last day of the semester.
Announcement 23-Feb: The midterm has been moved to March 23, the first class after spring recess.
Announcement 10-Feb: Lecture notes for lectures 1, 3, and 4 have been updated with clarifications, and fixes to typos.
Course information
This course provides an introduction to the formal semantics of programming languages: it provides tools and techniques for understanding the meaning of programs. Such tools allow us to answer questions about the correctness of programs, program analyses, and program transformations, and to understand some of the issues and complexities of programming language design. These questions and issues include the following.
- Are two programs indistinguishable?
- When I execute my program, will it encounter a run-time type error?
- Is it possible for a program written in this language to crash?
- Is this compiler optimization safe?
- Is programming language feature A more expressive than programming language feature B?
Topics covered in this course include:
- Dynamic semantics, including operational, axiomatic, and denotational semantics.
- Static semantics, including type systems and abstract interpretation.
- Language features, including exceptions, mutable locations, modules, and objects.
See the lecture schedule for more detailed information on topics covered.
Course staff
- Instructor: Stephen Chong, MD 145
Office hours: Mondays, 3:30-5:00
Email: Turn on JavaScript to view the email address - Teaching Fellow: Gregory Malecha, MD 309
Office hours: Thursdays, 2:30-3:30
Email: Turn on JavaScript to view the email addressEmail is great for questions that have a short answer, such as scheduling a time to meet. However, live interactions are more efficient for conversations, discussions, and explanations. And they are more fun. So email the course staff only when it is sensible. For example, to schedule a time to meet. Otherwise, come to office hours or talk to the instructor after class. Replies to emails may take up to 48 hours.
Time and place
Tuesdays and Thursdays, 10:00am-11:30am, 60 Oxford St, Rm 330.
Prerequisites
Computer Science 51. Also recommended is Computer Science 121. Students must have good programming skills, be comfortable with recursion, basic mathematical ideas and notations. Feel free to contact the instructor if you have questions about the requirements or other aspects of the course.
Homeworks, exams, and grading
- Midterm: Tuesday 23 March (in class)
- Final exam: Tuesday 11 May, 9am, Sever Hall 206
- Homeworks: 6 assignments. Some will contain a programming component in Ocaml. See Assignments page for due dates.
- Term paper: due date 27 April
Your grade will be determined by a weighted average of your scores on homework assignments, the term paper, the midterm exam, the final exam, and class participation. The percentage breakdown (roughly and subject to change) is 40% homework assignments, 10% term paper, 20% midterm, 25% final exam, and 5% participation.
Textbooks
There is no required textbook for this course. However, most of the material in this course can be found in the following books, all of which are either available electronically, or are on reserve at the library.
- "Concepts in Programming Languages" by John C. Mitchell, Cambridge University Press, 2003.
Available online through Harvard University Libraries eContent Collection. To view on a Mac, follow these instructions.
- "The Formal Semantics of Programming Languages" by Glynn Winskel, MIT Press, 1993.
Available on reserve at the library.
- "Programming Languages: Application and Interpretation" by Shriram Krishnamurthi.
Available on the author's website: http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/.
- "Types and Programming Languages" by Benjamin C. Pierce, MIT Press, 2002.
Available on reserve at the library.
Lectures/schedule
See here for more information.
Assignments
See here for more information.
Late penalties, collaboration, and other course policies
See here for more information.