GSoC/GCI Archive
Google Summer of Code 2009

Boost C++ Libraries

Web Page:

Mailing List:

Boost provides free peer-reviewed portable C++ source libraries. We emphasize libraries that work well with the C++ Standard Library. Boost libraries are intended to be widely useful and usable across a broad spectrum of applications. The Boost license encourages both commercial and non-commercial use. We aim to establish "existing practice" and provide reference implementations so that Boost libraries are suitable for eventual standardization. Ten Boost libraries are already included in the C++ Standards Committee's Library Technical Report (TR1) as a step toward becoming part of a future C++ Standard. More Boost libraries are proposed for the upcoming TR2.


  • Boost.Python py3k support This project will add Python 3 support for Boost.Python. So the users of Boost.Python can migrate to Python 3 easily after this project completed. The goal is the Boost.Python library and users' codes can be compiled with both Python 2 and 3 without modification of code. So we can maintain just one version of code to provide extension module for either version of Python.
  • Graph Partitioning in The Boost Graph Library Graph partitioning is an important problem with extensive application in scientific computing, optimization, VLSI design, and task partitioning for parallel processing. My GSoC project would be to implement several graph partitioning algorithms on the existing BGL graph types, and then, depending on the availability of a hypergraph data structure, either look at partitioning algorithms on hypergraphs, or attempt to implement those partitioning algorithms in The Parallel BGL.
  • Porting boost.fusion to c++0x. Since the c++0x puzzle begins to take shape and a lot of developers use compiler that support at least a subset of the c++0x language, new demands are made on boost.fusion. The main goal of this project is to follow these demands and update boost.fusion so c++0x developers can use this library intuitively without ugly workarounds or potentially wasted compile time.
  • Relations data type The graph data type in the BGL is a container where a user defines a set of objects and indicates whether there are connections between said vertices. However, all connections between the objects within a graph are arbitrary, at least from the graph data type's point of view. This proposal is to implement an adaptor to the Graph data type based on an abstraction of relations. This adaptor will allow a user to define a condition that a pair of objects must satisfy in order to be connected.
  • Unicode handling This proposal aims at providing the base tools upon which a full Unicode environment can later be built, by proposing tools in a locale-agnostic context to categorize unicode code points, iteration of code points within an encoded form, as well as an unicode string type to accurately represent text.