Important Dates

project proposal, first submission: October 8th

project proposal, second submission: October 15th

status report: November 9th

final report: December 1st

Overview

CS 476 will have a final project in place of a final exam. The goal of the project is to use the techniques of the class to describe a new programming language or language feature. You can work alone or in groups of 2 or 3. You can choose one of the following options, or suggest something else of similar scale:

  1. Write syntax, typing rules, and/or operational semantics for a language or feature not covered in class, and implement them in code. You may extend some of the existing assignments with the new feature, or write new versions.

  2. Design and implement a small domain-specific language: a database query language, matrix manipulation language, music synthesis language, interactive fiction language, or anything else that seems like it could benefit from a small custom programming language.

  3. Find an existing formal language definition or functional interpreter and extend it with a new feature, or use it for something like finding bugs in programs or proving programs correct. Some examples are the CompCert C semantics, the WebAssembly reference interpreter, or the RISC-V instruction set semantics. If you have a language in mind but don’t know if it has formal semantics available, let me know and I can help you find them – it probably does!

For inspiration, think about the programming languages you know (or have always wanted to learn!) and the features from them that aren’t on the syllabus (if you’re not sure whether we’re going to cover something in class, ask!). If you’re interested in a more research-oriented project, you might also find ideas in papers from conferences such as Principles of Programming Languages (POPL) or Programming Language Design and Implementation (PLDI).

Project Proposal

To start, you (individually or as a group) should submit a one-page proposal that contains the following information:

  • What you want to do, at a high level. For instance: “We plan to add support for arrays and bounds checking to the simple imperative language.”
  • Some example programs that demonstrate the language/feature that you want to build. This is especially important, because it gives us an idea of what your goal is and how we’ll know whether you’ve built what you wanted to build.
  • Which programming language, research paper, or textbook has a similar feature or can be used as a reference. For instance: “I will use the behavior of arrays in Java as a model.”
  • Which sections of the language definition will be involved. For instance: “This will involve extending the grammar for expressions and commands, writing new typing and semantic rules, and implementing them in OCaml.”
  • Anything else you’d like to mention, like the reason why you’re interested in this particular project, other possible sources of inspiration, or more things you’d like to add if you have time.

The purpose of this proposal is to get you started on thinking about the project, and to plan out a reasonable amount of work for it. If your proposal sounds too big or too small, we’ll discuss and figure out a way to resize it. If you’re having trouble picking a topic, come by office hours and we can talk about some possibilities.

Status Report

By the end of the day on Thursday, November 9th, you (or your group) should submit a status report for your project, including any code you’ve written and a brief write-up of what you’ve done so far, what you still have to do, and any challenges you’ve encountered. This is a chance for you to get feedback on your project direction and advice on anything you’re stuck on. The more specific your writeup, the more I can help: what is the step you’re currently working on? What did you try, and why didn’t it work? Feel free to include partial or incorrect code in comments. Like the first submission of an assignment, you will receive credit for the status report as long as you’ve made any progress, and the more parts you’ve started the more helpful the feedback will be.

Final Report

By the end of the day on Friday, December 1st, the last day of classes, you (or your group) should submit your final project report, including both your code and a summary of what you accomplished, what you weren’t able to do, and some details on the hardest or most interesting parts. Your code should include at least two examples that I can run to see your project in action (even if they don’t run exactly the way you want them to). Your report may be either written (a Word document, README file, TeX document, etc.) or video (a recording of you walking through your code and describing the interesting parts: you may find screenapp.io useful).