Computer Laboratory

Cambridge Programming Research Group

Research areas

The CPRG is interested in all aspects of programming language design and implementation. Members of the group have produced many large programs, see our software page for more details.

Here are some of the areas in which we are currently working:

static analysis

  • abstract interpretation (am, st)
  • decompilation (am, ecu)
  • code compaction (nej, al)
  • redundancy in concurrent algorithms (mv)

code optimisation and generation

  • general optimising compiler technology (mr, ma, al, acl)
  • program representation (ecu, acl, sn)
  • retargetable code generation (mr, al, sn)
  • data transformations (sn, ma)
  • high-level optimisations (sn)

virtual machine engineering

  • implementations of efficient abstract bytecodes and virtual machines (mr)
  • JVM implementation and its correctness (mv)


  • optimisation for SIMD architectures (al)
  • software transactional memory (vv)
  • concurrent garbage collectors (mv)


  • separation logic (vv, rt)
  • rely/guarantee reasoning (vv, mv)
  • program verification for Haskell (nx)
  • Owicki/Gries (mv)


  • object calculi and type systems (am, acl, pb, nx)

other interests

  • hardware synthesis (am)
  • software obfuscation (al)