Research

I'm a PhD student in the Mathematically Structured Programming Group. My supervisor is Conor McBride and I'm working on reusability and dependent types.

Dependent types allow us to capture the invariants of our data-types with great accuracy. For instance, one can index lists by their lengths, hence obtaining the safer vector datatype. Because lists and vectors are different datatypes, a function such as the ubiquitous map needs to be implemented twice, performing the very same operation by a slightly different implementation. Are we condemned to such fate? We don't think so.

(This doesn't mean that we have a clue of the solution, right? Dear EPSRC, please keep sending the money, the problem is not solved. Thanks.)

Being Conor's student, I'm working on Epigram. And that's a lot of fun! With Peter Morris, we regularly break everything by changing the definition of datatypes. Apart from breaking things (which remains my principal activity, tho), I've implemented Elimination with a motive, implemented several times our universe of datatypes, and I'm currently working on Universe Stratification.

I'm interested in, well, too many things. Constructive type-theory is the amniotic fluid nourishing me everyday. Interaction structures are my K2. Category Theory is my Everest. If truth be told, I also appreciate the beauty of relevant System research. Rumor say I write C code on full moon nights and conspire to make a POSIX interface in Epigram.

Publications

The Gentle Art of Levitation

James Chapman, Pierre-Evariste Dagand, Conor McBride, Peter Morris

We present a closed dependent type theory whose inductive datatypes are presented not by a scheme for generative datatype declaration, but by encoding in a "universe". Each inductive datatype is thus given by interpreting its description" -- an ordinary first-class value in a datatype of descriptions. Moreover, the latter itself has a description.

By presenting datatypes via such a self-encoding universe, datatype-generic programming becomes ordinary programming. We show some of the resulting generic operations and deploy them in particular, useful ways on the datatype of datatype descriptions itself. Surprisingly this apparently self-supporting setup is achievable without paradox or infinite regress.

Filet-o-Fish: practical and dependable domain-specific languages

Pierre-Evariste Dagand, Andrew Baumann, Timothy Roscoe

We address a persistent problem with using domain-specific languages to write operating systems: the effort of implementing, checking, and debugging the DSL usually outweighs any of its benefits. Because these DSLs generate C by templated string concatenation, they are tedious to write, fragile, and incompatible with automated verification tools.

We present Filet-o-Fish (FoF), a semantic language to ease DSL construction. Building a DSL using FoF consists of safely composing semantically-rich building blocks. This has several advantages: input files for the DSL are formal specifications of the system's functionality, automated testing of the DSL is possible via existing tools, and we can prove that the C code generated by a given DSL respects the semantics expected by the developer.

Early experience has been good: FoF is in daily use as part of the tool chain of the Barrelfish multicore OS, which makes extensive use of domain-specific languages to generate low-level OS code. We have found that the ability to rapidly generate DSLs we can rely on has changed how we have designed the OS.

The Multikernel: A new OS architecture for scalable multicore systems

Andrew Baumann, Paul Barham, Pierre-Evariste Dagand, Tim Harris, Rebecca Isaacs, Simon Peter,
Timothy Roscoe, Adrian Schupbach, Akhilesh Singhania

Commodity computer systems contain more and more processor cores and exhibit increasingly diverse architectural tradeoffs, including memory hierarchies, interconnects, instruction sets and variants, and IO configurations. Previous high-performance computing systems have scaled in specific cases, but the dynamic nature of modern client and server workloads, coupled with the impossibility of statically optimizing an OS for all workloads and hardware variants pose serious challenges for operating system structures.

We argue that the challenge of future multicore hardware is best met by embracing the networked nature of the machine, rethinking OS architecture using ideas from distributed systems. We investigate a new OS structure, the multikernel, that treats the machine as a network of independent cores, assumes no inter-core sharing at the lowest level, and moves traditional OS functionality to a distributed system of processes that communicate via message-passing.

We have implemented a multikernel OS to show that the approach is promising, and we describe how traditional scalability problems for operating systems (such as memory management) can be effectively recast using messages and can exploit insights from distributed systems and networking. An evaluation of our prototype on multicore systems shows that, even on present-day machines, the performance of a multikernel is comparable with a conventional OS, and can scale better to support future hardware.

Opis: reliable distributed systems in OCaml

Pierre-Evariste Dagand, Dejan Kostic, Viktor Kuncak

Concurrency and distribution pose algorithmic and implementation challenges in developing reliable distributed systems, making the field an excellent testbed for evaluating programming language and verification paradigms. Several specialized domain-specific languages and extensions of memory-unsafe languages were proposed to aid distributed system development. We present an alternative to these approaches, showing that modern, higher-order, strongly typed, memory safe languages provide an excellent vehicle for developing and debugging distributed systems.

We present Opis, a functional-reactive approach for developing distributed systems in Objective Caml. An Opis protocol description consists of a reactive function (called event function) describing the behavior of a distributed system node. The event functions in Opis are built from pure functions as building blocks, composed using the Arrow combinators. Such architecture aids reasoning about event functions both informally and using interactive theorem provers. For example, it facilitates simple termination arguments.

Given a protocol description, a developer can use higher-order library functions of Opis to 1) deploy the distributed system, 2) run the distributed system in a network simulator with full-replay capabilities, 3) apply explicit-state model checking to the distributed system, detecting undesirable behaviors, and 4) do performance analysis on the system. We describe the design and implementation of Opis, and present our experience in using Opis to develop peer-to-peer overlay protocols, including the Chord distributed hash table and the Cyclon random gossip protocol. We found that using Opis results in high programmer productivity and leads to easily composable protocol descriptions. Opis tools were effective in helping identify and eliminate correctness and performance problems during distributed system development.

Contact

email:
dagand --at-- cis.strath.ac.uk
office:
L12.16, Livingstone Tower
address:
Department of Computer and Information Sciences
University of Strathclyde
Glasgow G1 1XH, Scotland
Me, indeed. email: dagand --at-- cis.strath.ac.uk

Research stuffs

My PhD depends on: