You will complete a final project for CSCI 360 which brings together some of the ideas we have explored this semester. You may work on the project either individually or in a pair.
The topic of the project is open-ended; the only requirements are:
The project must (of course) explore one or more programming languages or programming language features.
The project must include a significant programming component.
It will likely make the most sense for the programming to be done in Haskell, but this is not required.
Some possibilities include:
Design and implement a language, in a way similar to what we have done with many of the modules and projects this semester. The language could be a standalone language or an EDSL.
Explore a language feature or implementation technique beyond what we have covered in class, such as, but certainly not limited to:
The best way to approach such a project would be to start with a question like “How does X work in language Y?” and then talk to me about it, and I can point you in the direction of relevant resources.
Explore a classic (or recent) PL paper and implement some of the ideas contained in it. This could be a really fun and worthwhile project, but it’s hard to list potential examples in advance. If you are interested in a particular topic, come talk to me and I can help you find an appropriate paper.
Contribute to an open-source language implementation. For example:
You must turn in a 1-2 paragraph proposal explaining your chosen final project topic by Monday, April 17th.
The project is due at 8:30am on Thursday, May 4 (though you may turn it in earlier to receive feedback). During the officially scheduled CSCI 360 final exam slot from 8:30-11:30am, each group will give a presentation/demo of their project. It does not need to be a carefully planned, polished presentation; just explain what you did and/or show us some cool examples.
You should turn in:
Your code: submit either
A README file, formatted either as plain text, markdown, or LaTeX. In your README you should:
README
A file named INSTALLING with step-by-step instructions for how to build and test your project. For example, it should list any packages needed from Hackage, any other tools needed, etc. It could also include URLs linking to other instructions—for example, if you contribute to some open-source language implementation you will probably want to link to existing instructions for building that project.
INSTALLING
Optionally, you may want to include a directory named examples containing some example programs, example executions, example outputs… or whatever is appropriate.
examples
To complete the project to Level 1, you must fulfill the requirements listed above:
To complete the project to Level 2:
Ensure that your code uses good Haskell style.
Make sure your code is simplified as much as possible, for example, without redundant pattern-matching.
Turn on {-# OPTIONS_GHC -Wall #-} and make sure your code generates no warnings.
{-# OPTIONS_GHC -Wall #-}
Ensure your project is well-documented, with plenty of comments explaining the code, thorough README and INSTALLING files, good examples (if appropriate), etc.
To complete the project to Level 3, the project must go beyond the content of the course in some significant way. I am aware that this is rather vague; if you would like to get Level 3 credit for the project, I encourage you to talk to me about it during the planning phase so that we can agree on an appropriate topic, and get feedback from me before the final deadline to make sure you are on track.