CS 421: Programming Languages and Compilers
Unit Project

Objectives

[top]

The primary objective of the unit project is to have the students explore a programming language concept or problem in greater depth than is possible with the standard lecture and machine problems.

Overview

[top]

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 and compilers), 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, or interesting to you personally.

The deadlines are listed to the right of this page. Projects may be done individually or in teams of up to 3 people, and are structured around an initial project proposal. You should expect about two or three MP's worth of work for each person involved in the project. The purpose of the 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.

The project will make up 25% of your grade in the course, and is essentially pass/fail. If you work at your project, provide deliverables on schedule, and achieve a reasonable solution in the given time frame, you will receive the same grade as for the regular part of the class, but applied to 4 hours rather than 3. If you fail the project, you will receive the grade form the regular part of the class on 3 hours, and a grade of 0% on the remaining 4th hour (meaning your final grade for the class will be 75% of your grade on the regular part of the class).

Project Proposal

[top]

Write a one page proposal that details the scope of your project and an implementation schedule. If you are basing your project on a paper, cite the paper and provide a URL to a PDF or postscript version. Be sure to include a description of the target language you want to work on, the concept you want to implement, and an outline of how you would like to achieve at the end of the semester (in a project report and/or a demo). Also, if you are going to do a group project, give a clear outline of each individual's responsibility in the project.

Your proposals are due by Monday, June 13. You should submit your proposal by e-mail to the instructor, as plain-text or PDF attachment. Please use the subject line "CS421 Project Proposal" to ensure that it does not get lost among other e-mails. Feel free to ask for an appointment or send an e-mail to discuss the project proposal with me before the proposals are due.

Project Ideas

[top]

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 for a task 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.

You could also focus on the back-end of the compiler: ASTs, symbol tables, intermediate representations, and code generation. One idea in this domain is to write a cheating detection tool for MiniJava, which ignores names and formatting, instead comparing the ASTs of two programs for similarities.

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.

Project Reports

[top]

The due dates for this project are listed on the right of this page.

Half-way into the project, you should submit a very short (1-2 page) status report by e-mail describing your progress on your implementation. This report should be as specific as possible about what has been implemented and what has not. Also mention if you feel the scope of your initial project proposal needs to be adjusted.

At the end of the project, you need to turn in two things:

  • a zip file containing your source code, tests, and Makefile; and
  • a project report, as a PDF file, containing the information below.

Your final report should have 4 sections:

Overview
Describe the motivation, goals, and broad accomplishments of your project in general terms.
Implementation
A brief description of the important aspects of your implementation, in terms of (a) the major tasks or capabilities of your code; (b) components of the code; (d) status of the project -- what works well, what works partially, and and what is not implemented at all. You MUST compare these with your original proposed goals in the project proposal.
Tests
Coming up with appropriate tests is one of the most important part of good software development. Your tests should include unit tests, feature tests, and larger test codes. Give a short description of the tests used, performance results if appropriate (e.g., memory consumption for garbage collection) etc. Be sure to explain how these tests exercise the concept(s) you've implemented.
Listing
A listing of your code. The code should be documented thoroughly and clearly. You don't need to comment every single line or even every single function. Instead, focus on the central functions and data structures in your implementation, and document them well.

Milestone Dates
Proposal July 13
Status Report July 24
Final Report August 6

Contents
Objectives
Overview
Project Proposal
Project Ideas
Project Reports