CO320 is a prerequisite. CO523 is a co-requisite alternative to CO320.
Information below is for the 2017-18 session.
OverviewThis module will introduce students to fundamental concepts of functional and concurrent programming, using a suitable language (e.g. Erlang) as a vehicle to put these concepts into practice. The first part of the module will cover basic ideas in functional programming, such as expressions, types, values, lists, pattern-matching and recursion, together with the specific language concurrency model, including process creation, message sending and receiving. Good concurrent design practices will be considered, based on networks of communicating processes (e.g. Actor and CSP models), and avoiding problems such as deadlock, livelock and starvation.
The later part of the module will cover more advanced topics (higher-order functions) and look at alternative concurrency models (e.g. synchronous, channel-based, join-based and shared-memory) and their relationship to the model described in the first part of the module. Alongside this, consideration will be given to the relevance and applicability of functional and concurrent programming for use in real applications.
This module appears in:
22 hours of lectures
22 hours of terminal classes and seminars
Method of assessment
Erlang Programming", Francesco Cesarini and Simon Thompson, O'Reilly Media,
2009. ISBN 0-596-51818-8.
"Programming Erlang: Software for a Concurrent World", Joe Armstrong, Pragmatic
Bookshelf, 2007. ISBN 1-934-35600-X.
Have a basic understanding of the concepts of functional programming: how evaluation operates, side-effect-free programming, the role of types and type definitions.
Have a basic understanding of the concepts of concurrent programming: software processes/threads, communication and synchronisation.
Be able to use effectively functional and concurrent programming paradigms to design systems.
Be able to implement functional and concurrent programs to solve specific problems using appropriate programming paradigms.
Be able to understand and use recursion and higher-order functions in functional programming.
Have an understanding of deadlock, livelock and starvation when designing concurrent systems.