CS 421: Programming Languages and Compilers
Projects

Graduate students enrolled in the course for 4 hours of credit are required to complete a class project. This project needs to be related to the content of this course (i.e., something to do with programming languages), but otherwise the requirements are fairly flexible. In general, you should strive to select a project that is related to programming languages, related to your own research, and interesting to you personally.

Projects may be done in teams of up to 3 people, and are structured around an initial project proposal. The purpose of this proposal is to set out the work required for a successful project, and to ensure that the amount of work is reasonable -- it is often much easier to accidentally choose a project that is too large than one that is too small, but this provides a check on both.

Grading of the project is essentially pass/fail, and is not directly factored in to your grade. In other words, if you are registered for 4 hours, you are under the same percentage breakdown between exams and homeworks as students registered for 3 hours. If you work at your project and achieve a reasonable solution in the given time frame, you should receive credit for the project, meaning you will receive credit for the 4th credit hour. If you do not, you will have the option of either taking an incomplete in the class or of switching to 3 credit hours.

Project Ideas

You can view information on projects done by students in past iterations of CS421 by going to the CS421 unit project page from Summer of 2007. A good way to approach a project is to select a domain you are interested in and then design a language that would work well in that domain (what is typically called a DSL, or Domain Specific Language).

Another option is to implement a subset of a language you are interested in. For instance, if you are interested in C, you could implement a portion of C. This gives you the opportunity to look more deeply at a language you use every day.

Finally, you could extend an existing system with new features. For instance, if you are interested in compilers, you could extend the LLVM system designed by Vikram Adve's research group here at UIUC. Or, you could try adding a new language feature to an existing language implementation. One warning is that this could be a major undertaking, especially in cases where this would require modifying a large, maybe monolithic system that is not designed to be easily changed.

Important Dates

The initial project proposal is due June 16, 2008. There are two status reports that are due, on June 30, 2008 and July 18, 2008. The final project report is due on July 28, 2008, along with the completed project. The initial proposal should be short (no longer than 2 pages). Status reports can be as long or short as necessary. It would be best for the final report to include details of the project, any language extensions, etc, as well as information on a demo of the capabilities of your project. No special length requirement is necessary, but you should indicate how your project addresses any of the points made in the initial proposal.