News
- Mar 30. The Midterm Exam has been posted on the moodle. The initial submission is due Sat Apr 4 at noon and the resubmission (if necessary) is due Tue Apr 7 at 11:59pm.
- Mar 1. Homework Assignment 6 has been posted and is due Mon Mar 9. It has only one short exercise.
- Mar 1. Project dates have been posted.
- Mar 1. Some project suggestions have been posted on the course moodle.
- Feb 23. Homework Assignment 5 has been posted and is due Mon Mar 2.
- Feb 17. Guidelines for the final project have been posted.
- Feb 16. Homework Assignment 4 has been posted and is due Mon Feb 23.
- Feb 9. Homework Assignment 3 has been posted and is due Mon Feb 16.
- Feb 2. Homework Assignment 2 has been posted and is due Mon Feb 9.
- Jan 30. Because of a scheduling conflict on Monday, I am swapping the times for my Monday and Wednesday office hours. I will have office hours on Monday from 5:30pm-6:30pm and on Wednesday from 1:30pm-2:30pm.
- Jan 26. Homework Assignment 1 has been posted and is due Mon Feb 2.
- Jan 25. My office hours for Jan 26 will be moved to after class 5:30pm-6:30pm.
- Jan 21. I have listed some resources for getting a Linux environment.
- Jan 19. Homework Assignment 0 has been posted and is due Mon Jan 26.
- Jan 14. Slides will be posted on the schedule page after each class.
- Jan 13. If you are having trouble accessing the papers from off campus, the CU library has instructions for off-campus access to certain online resources (e.g., ACM Digital Library).
- Jan 12. The textbook is now on reserve in the Engineering Library.
Course Overview
This course is designed to acquaint you with the fundamental ideas behind modern programming language design and analysis. Ultimately, you should come away with the ability to apply programming language techniques to your own projects.
The course has three broad topics:
- Introduction to Semantics: How do we describe programming languages?
- Introduction to Type Systems: Which programs "make sense"?
- Research Applications
The first part of this graduate-level course focuses on the semantics of a variety of programming language features (e.g., "what does a while loop really mean?"). We will study structural operational semantics as a way to formalize the intended execution and implementation of languages. Operational semantics concepts and notation are widely used in modern programming language research. We will survey axiomatic semantics, which provides a basis for verifying programs. Axiomatic semantics underlie research efforts in formal verification and bug finding (e.g., SLAM, which led to Microsoft's Static Driver Verifier). We will briefly look at denotational semantics as a prelude to abstract interpretation. Abstract interpretation also underlie research efforts in program analysis and bug finding (e.g., Astrée, which has been used by Airbus to analyze their flight control software). The Program Analysis course taught by Amer Diwan studies this topic in greater depth.
The second part of this course provides an introduction to the study of type systems for programming languages. We will start our study with the simply-typed lambda calculus and then touch upon more advanced features such as types for imperative features, exceptions, and abstraction. Type systems abound in modern programming languages research. The Types and Programming Languages course taught by Jeremy Siek provides an in-depth study of this topic.
The last part of the course covers special topics drawn from research in areas such as applications of program semantics to program analysis and verification.
In addition to these topics, 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 with prior exposure to several different programming languages, such as C, ML, and Java, which may be satisfied by taking CSCI 3155 or equivalent. The ideal programming experience is an undergraduate compilers course (e.g., CSCI 4555). The ideal mathematical experience is familiarity with mathematical logic and the ability to construct rigorous proofs (in particular by structural induction). These prerequisites are not strict. However, your desire to be exposed to this material is very important.
Advanced undergraduates may consider taking this course after talking with the instructor.
Requirements
You will be responsible for the following:
- Class Participation (10%). Participation includes both in-class and online discussion.
- Homework Assignments (25%). There will be weekly problem sets for the first half of the course.
- A Midterm Exam (25%). There will be a take-home exam (closer to the end of the course).
- A Final Project (40%). In the second half of the course, your time will be spent on a final project. You will create a final project that explores, extends, or experiments with the ideas in the course.
- Reading. There will be required papers or book chapters to read.
Late policy. 10% of the point value will be deducted for each day (including weekends) the assignment is late.
Textbook and Resources
Textbook. Glynn Winskel. The Formal Semantics of Programming Languages. The textbook is on reserve in the Engineering Library.
The following are some other resources:
- Benjamin C. Pierce. Types and Programming Languages. This book is the text for the ECEN 5023/CSCI 7135 Types and Programming Languages. [e-book via CU library]
- Flemming Nielson, Hanne Riis Nielson, and Chris Hankin. Principles of Program Analysis. This book is the text for CSCI 7135 Program Analysis.
- Robert Harper. Practical Foundations for Programming Languages. This book is a draft under revision. It is the text used in the undergraduate theory of programming languages class at CMU. It provides some additional background and another presentation of some of the topics we will discuss (e.g., operational semantics, types).
Off-Campus. The CU library has instructions for off-campus access to certain online resources (e.g., ACM Digital Library).
Computing. For a Linux environment, the following are some resources:
- CS students can create a a CSEL account. CSEL has a lab in ECCS 128 and remote access servers with SSH (elra-01 through elra-04.cs.colorado.edu).
- ECE students can create an ECES account.
- You can download and install the CU Computer Science Virtual Machine.
Moodle
We will use Moodle for online discussion. If do not already have an account, please create one and join the course moodle.Collaboration Policy
You are welcome and encouraged to work together in learning the material. If you worked with someone on an assignment, or if your submission includes quotes from a book, a paper, or a web site, you should thank the source. Bottom line, feel free to use whatever resources that are available to you as long as you cite them in your submission.
We will go by the honor code set forth by the University:
All students of the University of Colorado at Boulder are responsible for knowing and adhering to the academic integrity policy of this institution. Violations of this policy may include: cheating, plagiarism, aid of academic dishonesty, fabrication, lying, bribery, and threatening behavior. All incidents of academic misconduct shall be reported to the Honor Code Council and those students who are found to be in violation of the academic integrity policy will be subject to both academic sanctions from the faculty member involved and non-academic sanctions given by the Honor Code Council (including but not limited to university probation, suspension, or expulsion).
Please refer to www.colorado.edu/honorcode/ to view the specific guidelines. If you have any questions related to this policy, please contact the Honor Code Council at honor@colorado.edu.
Acknowledgments
This course is based on similar courses taught by George Necula at the University of California, Berkeley and Wes Weimer at the University of Virginia.