Course Project
Students registered for CS 386L (the graduate-level version of the course) are required to complete a course project. The project is intentionally open-ended and is an opportunity to explore something interesting in the realm of programming languages, broadly construed.
Ideas
I think programming languages is a very broad topic, touching many fields of computer science, and so we'll take a similarly broad approach to defining what's in scope for the course project. Here are a few suggested directions to consider (these are by no means exhaustive):
- Contribute some code to an open-source compiler — look for open issues or missing features and implement them yourself.
- Build a program synthesis tool — a tool that can automatically generate correct programs — for a domain you're interested in.
- Adapt PL ideas in domains you might not think of as "programming" -- cell biology, education, etc. This might mean defining your own language for a new domain, or taking some of the formal ideas from this class and producing a new domain-specific twist on them.
- Model and prove the correctness of some interesting feature of a language you like, or a feature you wish a language had.
- Apply programming languages ideas to your own research, regardless of area.
- Build a tool for identifying a class of security issues in programs.
- Implement a garbage collector for C.
- Write a survey of a programming languages topic that we aren't covering in this class, but could. Think of this option as teaching yourself enough to write a lecture on the topic that you could give at the end of this semester. If you choose this route, expect to read several textbooks and/or research papers, so don't underestimate how much work it will be. Some suggested topics:
- Concurrency — pi calculus, shared memory, consistency models, etc.
- Databases are closely coupled to programming languages ideas — relational algebras, query languages, query compilation, etc.
- Memory management — garbage collection, reference counting, region-based (Rust), etc.
- Refinement types — fancy type systems that include rich predicates, liquid types, etc.
- Separation logic — reasoning about programs with heaps.
Basically, the goal is to either code, model, or write something that piques your interest and applies the ideas from this class.
Milestones
There are two milestones for the project, both submitted via Canvas:
- Submit a short project proposal (1–2 pages, plus references) by February 22 at 6pm CT. The proposal should identify your group members (if applicable), outline what you intend to do, sketch how you intend to do it, estimate how much work it will take, and describe why it's relevant to programming languages (if it's not obvious). We'll use the proposal as an opportunity to give you feedback on your project direction, making sure it's in scope for the course and an appropriate size for the semester.
- Submit a final project report (4–6 pages, plus references) by April 25 at 6pm CT. The final report should describe the problem you tried to solve, how you solved it, any results or data you gathered, and any future directions for the work. Think of the project report as writing a short research paper that you could submit to a workshop. We'll grade the final project report based on the ambition of the proposed project, the results achieved, and the quality of the report.
Group projects
You may complete the course project alone or in a group of up to 3 students. Larger groups should expect to propose and complete commensurately larger projects. As part of the project proposal, we'll give feedback on whether the scope of your project is appropriate for the group size and length of the semester. All group members will receive the same grade for the project, except in exceptional circumstances.
Redeemable option for CS 345H
Students registered for CS 345H (the undergraduate version of this course) can choose to complete the course project on a redeemable basis. This means we'll compute your final grade with both the 345H and 386L grading scales and you will receive whichever grade is higher. In other words, there's no risk involved in choosing to do the course project—although it will still be a lot of work!—so we encourage you to give it a try if you're interested in doing something cool with programming languages. It's fine for students to form groups across both variants of the course. You cannot opt into the course project after the due date for project proposals has passed.
Please don't interpret this redeemable option as license to flake out on a group project. In circumstances where group members haven't contributed fairly to a project, we reserve the right to deny you the redeemable option (offering only the grading scale that includes the project) and/or to assign different project grades to members of the same group.