CSCI 7000 -- Advanced programming language techniques for incremental computation

Course Information

Instructor: Matthew A. Hammer
Meetings: ECCR 108
M,W,F 10:00-10:50
Meeting Schedule
Office Hours: TBA
Slack channels: Class Announcements (public channel)
Student Discussion (private to class members)

Standard Syllabus Statements


This course introduces the fundamental principles of programming language design, semantics, and implementation of incremental computations. Incremental computations are those that run faster after small input changes that naive recomputation of the updated output.

To express incremental computations that are efficient and correct (or sound, meaning consistent with from-scratch evaluation), we will study designs that combine new algorithms and programming language abstractions.

To understand these algorithms and PL abstractions in practice, we will use Adapton in Rust.

Course topics

Algorithmic techniques for incremental computing:
Programming language design for incremental computing:

Schedule: Readings and programming tasks

Please see the schedule of lectures for the lecture topics and links to the readings and assignments.

Course requirements

The primary sources of information, and the students' responsibilities for this course, consist of doing the following:

Participation requirement. Your grade in this class will largely be a subjective measure of your level of class participation during lecture, class discussions about readings and programming tasks. This grade will reflect the instructor's subjective impression of your contributions. To earn a good grade, you are required to attend lecture, and to participate in class discussions (on Slack). To earn an excellent grade, you are required to challenge yourself (this is an individual metric, and is thus subjective).

Course Project

Roughly half-way through the course, students will begin to work in pairs (or independently, with permission from the professor) on a course project. This project will consist of a combination of implementation work, theoretical work, and a literature survey. The final meetings of the class will consist of project teams giving oral presentations about their project. Additionally, each project team is required to submit a written report. See the course project page for details about the scope of these projects, and the requirements for presentations and reports.


Class participation (discussion about readings and programming tasks) will account for 50% of your grade, and the project the other 50%. Your final letter grade will be determined in part based on your performance relative to the rest of the class, though we have no pre-determined distribution in mind.

Late homework assignments will not be accepted or graded. They count for zero points. If you have a special circumstance that is truly beyond your control which prevents you from completeing your homework on time, contact the instructor before the homework due date to request a special accommodation. Requests made on or after the due date will be categorically ignored.


Robert Harper, Practical Foundations for Programming Languages (Second Edition). Cambridge University Press, 2016.

This text is suggested as a general textbook for programming languages. It is not required to complete this seminar course on incremental computation, but may be helpful for general background material on programming languages.
The author has made a preview version available online.


The programming languages we study and use in this course will be closely related to ML. Specifically, we will use the Rust implementation for homeworks that involve programming assignments.

Academic Integrity

As a condition for taking this course, you are responsible for compliance with the University Policy on Academic Integrity and Plagiarism.

In this course, you are authorized to use the books and notes linked from this Web site, as well as any other sources specifically allowed by the course staff. Any other source is unauthorized.

You are allowed to discuss homework assignments with other students. However, in order to ensure that the work you submit is still your own, we insist that you adhere to a whiteboard policy regarding these discussions: you are not allowed to take any notes, files, or other records away from the discussion. For example, you may work on the homework at the whiteboard with another student, but then you must erase the whiteboard, go home, and write up your solution individually. We take your ability to recreate the solution independently as proof that you understand the work that you submit.

This policy is our attempt to balance the tension between the benefits of group work and the benefits of individual work. We ask that you obey the spirit of the policy, as well as the letter: ensure that all work you submit is your own and that you fully understand the solution. This is in your best interest: the exam constitutes a significant part of your final grade and it will draw heavily on the terminology, concepts, and techniques that are exercised in in the homework. It is unlikely that you will be able to do well on the exam if you do not take full advantage of the learning opportunity afforded by the homework assignments.

Valid XHTML 1.0!