Programming, Generative Programming, Template
Metaprogramming, and other techniques used to build
efficient, reusable software libraries.
- Parallel and distributed programming, including
programming models for exploiting parallelism,
libraries and languages to realize those models, and
parallel and distributed algorithms.
- Sequential, parallel, and distributed graph
- Visualization of large and distributed graphs,
including the algorithms that operate on them.
- Compiler analyses and optimizations,
particularly library-specific and user-defined
optimizations that operate at a very high level of
- Ad hoc programming language design, with a
strong focus on bending mainstream languages to do
new things instead of building research languages
- Variadic Templates for C++0x
Douglas Gregor and Jaakko Järvi. Journal of
Object Technology, 2008. Note: To appear.
- Design and Implementation of a High-Performance MPI for C# and the Common Language Infrastructure
Douglas Gregor and Andrew Lumsdaine. In
Proceedings ACM SIGPLAN Symposium on Principles
and Practice of Parallel Programming, February
Concepts: Linguistic Support for Generic Programming in C++.
Douglas Gregor, Jaakko Järvi, Jeremy Siek,
Bjarne Stroustrup, Gabriel Dos Reis, and Andrew Lumsdaine. In
Proceedings of the 2006 ACM SIGPLAN conference on Object-oriented
programming, systems, languages, and applications (OOPSLA '06),
October 2006. ACM Press. Accepted. Note: This is the author's
version of the work. It is posted here by permission of ACM for your
personal use. Not for redistribution. [PDF]
Algorithm specialization in generic programming: Challenges of constrained generics in C++.
Jaakko Järvi, Douglas Gregor, Jeremiah Willcock, Andrew Lumsdaine, and Jeremy Siek. In PLDI '06: Proceedings of the ACM SIGPLAN 2006 conference on Programming language design and implementation, pages 272-282, New York, NY, USA, June 2006. ACM Press. [PDF]
Lifting Sequential Graph Algorithms for
Distributed-Memory Parallel Computation.
Douglas Gregor and Andrew Lumsdaine.
In Proceedings of the 2005 ACM SIGPLAN
conference on Object-oriented programming,
systems, languages, and applications (OOPSLA
'05), pp. 423-437. October 2005. [PDF]
- MPI.NET: a high-performance, easy-to-use C# implementation of the Message Passing
Interface (MPI) for Microsoft's .NET environment.
Boost Graph Library: A generic C++ library for
parallel and distributed computation on graph data
structures. It was designed using the Generic
Programming methodology, and built on top of
the Boost Graph
A prototype C++ compiler built on top of
the GNU C++
Compiler that implements language extensions
Programming. This compiler implements the
extensions detailed in
concepts proposal for
- Variadic templates: an extension to C++ that allows templates to accept an arbitrary number of template arguments, and operate on those template arguments as a whole.
- Boost: Boost
is a collection of free, open-source, peer-reviewed
C++ libraries. Several Boost libraries have become
part of the
Technical Report. I currently maintain several
A high-level static analysis tool able to detect
errors in the use of (generic) software libraries,
such as the
Template Library. Much of the focus of the
static analysis was on high-level loop
debug mode: I developed the debug mode while an
intern in the compiler group
at Apple in
2003. It enables improved debugging of programs that
Template Library by tracking the movements of
A compiler optimizer that treats user-defined,
abstract data types at the same semantic level as
built-in data types. Abstract data types are
categorized using concepts, which describe
abstract semantic properties. Optimizing rewrite
rules are written in terms of concepts, so that a
single rule can be applied to many different data
types, even those not yet known to the