Part II and MPhil Project Suggestions, 2010-2011
(these will be updated from time to time)
The projects below are outline suggestions - feel free to come and
discuss how they could be turned into full proposals, or to suggest others in
the general area of applied semantics, especially
the relaxed-memory concurrency that
real-world multiprocessors exhibit, in verified compilation, or in
programming language semantics.
Possible supervisors for these include:
What is C, again?
C is part of the foundation of most computer systems, and much effort
has been devoted to its standardisation over the years, e.g. with
ANSI C from 1989 and C99. Currently a new revision is underway,
as C1X, and
the WG14 group
group has produced a working draft
But all these are prose documents, without any mathematical semantics,
so the basic question, of whether a language implementation meets
the standard, is not even precisely defined, let alone testable or
The goal of this project is to give an operational semantics for a
modest fragment of C, aiming to capture the intent
of the standard. The semantics should be usable as a test oracle:
given a small source program, it should be possible to calculate the
set of all permitted executions. The choice of the fragment to be
covered would be an important early choice: dealing with all of C is
almost certainly impractical, so one would expect to cover only a
small fragment, but we would probably hope to include at
least some of the concurrency aspects. It might be appropriate to
express the semantics directly in a functional programming language
(e.g. OCaml) or perhaps in a proof assistant or using the Ott tool.
- Michael Norrish gave a semantics for a significant fragment of C in
HOL, in his 1998 Computer Laboratory PhD C
formalised in HOL.
- There is ongoing work here on the C++ concurrency semantics, which is
expected to be adopted (or adapted) for C1X:
Concurrency by Mark Batty, Scott Owens, Susmit Sarkar, Peter
Sewell, and Tjark Weber. This has identified several issues with
the current C++0x draft, and proposed solutions which seem likely to
Leroy's CompCert is a
verified compiler from a C-like language, Clight.
- There is ongoing work here on verified compilation from an
extension of Clight with threads and shared memory: CompCertTSO
by Suresh Jagannathan (Purdue), Peter Sewell (Cambridge), Jaroslav
Sevcik (Cambridge), Viktor Vafeiadis (Cambridge), and Francesco Zappa
This is a challenging project which would suit someone with an
interest in semantics as it can be applied to real systems. It could
well lead in to a PhD in a related area.