Research Interests |
- Generic
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
algorithms.
- 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
abstraction.
- Ad hoc programming language design, with a
strong focus on bending mainstream languages to do
new things instead of building research languages
from scratch.
|
Selected Publications |
- 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
2008.
-
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]
More
publications...
|
|
Education |
- Ph.D, Department
of Computer
Science, Rensselaer Polytechnic
Institute, 2004.
- B.S., Department
of Computer
Science, Rensselaer Polytechnic
Institute, 2000.
|
Active Projects |
- MPI.NET: a high-performance, easy-to-use C# implementation of the Message Passing
Interface (MPI) for Microsoft's .NET environment.
- Parallel
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
Library and
the Message
Passing Interface.
- ConceptGCC:
A prototype C++ compiler built on top of
the GNU C++
Compiler that implements language extensions
to
support Generic
Programming. This compiler implements the
extensions detailed in
our latest
concepts proposal for
the C++
Standards Committee.
- 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
upcoming Library
Technical Report. I currently maintain several
Boost libraries,
including Function,
Graph,
Signals,
Tribool,
and
the BoostBook
documentation system.
|
Past Projects |
- STLlint:
A high-level static analysis tool able to detect
errors in the use of (generic) software libraries,
such as the
C++ Standard
Template Library. Much of the focus of the
static analysis was on high-level loop
analyses.
- libstdc++
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
use the
C++ Standard
Template Library by tracking the movements of
iterators.
- Simplicissimus:
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
optimizer.
|
|