Below is a list of suggestions for 7.5-ECTS projects related to functional programming and functional design. The suggestions are just that, so feel free to contact any of the teachers if you would like to do a variation on one of the suggestions, or perhaps something entirely different.
Contact Søren Debois (debois (at) itu.dk), Troels Damgaard (tcd (at) itu.dk) or Lars Birkedal (birkedal (at) itu.dk) if you are interested in writing a project.
Design and implement, in SML, a chess-playing computer program. This is easier than you think - in particular, you need no chess skills whatsoever!
Design and implement, in SML, a web-server. (That is, an HTTP-server.) Determine experimentally how your server holds up to, say, the Apache server.
Design and implement, in SML, a system for simulating electronic circuits at the gate-level. Demonstrate the viability of your system by simulating, say, a simple single-cycle implementation of a subset of the MIPS processor specification.
When engineers design mission-critical hardware systems, e.g., rockets for space flight, they may use computer programs called model checkers to verify that their systems behave. A model checker is a program which is given a system description and some behaviour, e.g., "the inner and outer hatches in the airlock are both open"; the model checker then checks if the system can ever have that behaviour. (In the airlock-example, we would hope not.)
There are really two problems in constructing a model checker:
The project: Implement a model checker in SML. To keep the project of a manageable size (and to introduce you to some really cool advances in computer science) we'll provide you with partial answers to one or both of the above questions.
NB! This is somewhat ambitious.
The SML of New Jersey system has a facility for SML functions calling and being called by C functions. This opens up the possibility of writing selected low-level kernel routines in SML.
The project: Select some small, isolated part of the Linux kernel, say, the TCP/IP-stack or the scheduler, and replace it with an SML-implementation. Determine experimentally how your implementation holds up to the official one.
NB! This is ambitious.