Title: Assessing Design Patterns for Concurrency
Supervisor: Adrian Francalanza

The recent advent of cheap pervasive multi-core processors has raised concerns across the programming world because most programmers are not able to program adequately these machines and harness their true potential.  

The study of Concurrency is not new.  The Process Calculi community has been studying this phenomenon for the last 30 odd years, obtaining a number of wonderful results.  However, these results are often deemed abstract and "removed" for the working programmers.  The Systems Programming community have also been successful in this regard.  They have had to deal with concurrency since the inception of multiprogramming operating systems and they have constructed software that has stood the test of time (eg. Unix OS). However, the solutions proposed are often deemed too low level in nature.  

The Object-Oriented Programming community, which nowadays is the main programming community, has had to deal with concurrency for some time as well.  Interestingly, it has been presenting its solutions as Design Patterns, programming idioms which have proved to be very palatable to programmers.  However, one often wonders whether such an approach will lead to solutions that are too centred around the object-oriented paradigm and which do not generalise to other paradigms used for concurrent programming such as message passing.  This project addresses this specific question form a very concrete stance.  We identify a number of concurrency patterns and try to apply them to a message-passing programming model.  We then asses how adequately these patterns migrated.  More concretely, the candidate is expected to:
1) understand and familiarise herself with the concept of design patterns.
2) Identify a number of patterns used for concurrency.
3) Identify a language base on message passing such as CML, Occam or Erlang, on which the design patterns will be tested.
4) Identify a case study to program in this language, while putting these design patterns to use.
5) Critically asses the applicability and genericity of the patterns backing up this assessment with any experience obtained from the case study.
  
Requirements: Strong interest in programming and design. 

Textbooks and Material:

[1] Design patterns : elements of reusable object-oriented software 
by Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides. Addison Wesley (1995) ISBN-10: 0201633612 

[2] Design Patterns Explained: A New Perspective on Object-Oriented Design (Software Patterns) (Paperback) by Alan Shalloway, James Trott.  Addison Wesley; 2 ed. (2004) ISBN-10: 0321247140

[3] Head First Design Patterns (Head First) (Paperback)
by Eric Freeman, Elisabeth Freeman, Bert Bates, Kathy Sierra, O'Reilly Media, Inc. (2004) ISBN-10: 0596007124 

[4] Pattern-Oriented Software Architecture Volume 2: Patterns for Concurrent and Networked Objects (Hardcover) Douglas Schmidt, Michael Stal, Hans Rohnert, Frank Buschmann, Wiley 1 ed. (2000) ISBN-10: 0471606952