I’m currently working on probabilistic programming. My other research interests include type systems and operational semantics for programming languages, especially module systems, functional and, more recently, object-oriented languages. I also work on concurrency and parallelism.
I obtained my PhD in Computer Science under the supervision of Don Sannella at the LFCS, at the University of Edinburgh. Before joining Microsoft in 2000, I briefly worked for Harlequin Ltd. on their Dylan compiler. I designed and implemented the extended module system of Moscow ML, a popular byte-code compiler for Standard ML. I was also a post-doc researcher under Andrew Pitts at the University of Cambridge Computer Laboratory. At Microsoft, together with Andrew Kennedy and Nick Benton, I developed SML.NET, a Standard ML compiler with object oriented extensions, that targets the Common Language Runtime and is integrated with Visual Studio .NET. Working with Andrew Kennedy and Don Syme, I contributed to the design and implementation of Generics on the Common Language Runtime, focusing on verification. I was also responsible for the implementation of the concurrency constructs in Cω, an extension of C# with native support for join patterns as well as type-safe manipulation of XML and SQL-like data. Combining Generics and Cω led to my implementation of the Joins library, an efficient combinator library for Cω-style join patterns implemented in C# 2.0 and easily usable from (at least) C# 2.0 and Visual Basic 8.0.
Against all odds, I’m now working on probabilistic programming, most recently on project Tabular, a machine learning addin for Excel based on Infer.NET. The software is available for download.
The original (lock-based) joins library served as the runtime for Concurrent Basic – a natural extension of Visual Basic 9.0 with join pattern style concurrency. Thanks to Erik Meijer and Lucian Wischik for their support.
Together with John Reppy, I worked on a parallel implementation of CML’s higher-order concurrency constructs, primarily for Manticore but also with a C# implementation for .NET.
Separately, Dimitrios Vytiniotis and I have used Coq to study type inference for QML, a simple variant of ML with impredicative polymorphism (think System F extended with ML’s implicit let-polymorphism).
I’ve also worked with Andreas Rossberg and Derek Dreyer on formalizing variants of ML modules in Coq.
Aaron Turon and I came up with novel, non-blocking implementation of join patterns (a re-implementation of the lock-based C# Joins Library) that scales well on multi-core processors. This new implementation offers high-level, declarative synchronization (as before) with good parallel performance (the new bit).
I worked with Gavin Bierman, Geoffrey Mainland, Erik Meijer and Mads Torgersen to give a high-level operational semantics for C#’s latest feature, asynchronous methods. Asynchronous methods make it easy to write asynchronous, concurrent code without resorting to explicit continuation passing style. See our forthcoming ECOOP 2012 paper.
Awards and Activities
- I was a PC member for OOPSLA’13 and PADL’15.
- I was co-chair for PADL’12: the 14th International Symposium on Practical Aspects of Declarative Languages.
- I organized the The 2007 ACM SIGPLAN Workshop on ML.