Douglas Gregor, Ph.D
Doug Gregor Assistant Director
Open Systems Laboratory
Indiana University
135 Lindley Hall
Bloomington, IN 47405
Phone: (812) 855-8898
Fax: (812) 855-4829

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.