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.
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).
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.
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.
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.
|