Niall Douglas
I feel hesitancy with anything you have yet to design. Also, I personally think your earlier work items are already more than plenty for a GSoC which really is not very long. GSoC uses a US summer schedule, we here in Europe get much longer summer holidays (equally, the Chinese get less than the US).
Alright, I removed those two tasks.
- Make std::tuple, MPL sequences and Fusion sequences valid MPL11 sequences, so they can be used in MPL11 algorithms.
Very nice. You're getting me very excited about MPL11 now.
Since it is not too daunting, I made this a non-optional task.
Superb Louis. With Joel as prospective mentor, this is exactly the kind of GSoC we look for at Boost. Knock the above list into a proposal according to Google's proposal template, send it here and I think not long after you're ready to submit.
My full proposal follows the Boost template available here:
https://svn.boost.org/trac/boost/wiki/SoCSubmissionTemplate
Here we go. It's rather long, sorry if you meant that I should only
post a link to it.
------------------------------------------------------------------------------
Background information
======================
I am an undergraduate in mathematics with a passion for programming.
My educational and programming backgrounds are summarized on my resume [1].
I could write those here, but that would be redundant.
My main programming interests are metaprogramming and functional programming
in C++ or other languages (Haskell, Python). I usually love it when there
are some abstract mathematics hidden somewhere, so I search for that. I am
interested in contributing to Boost because of the quality of what gets in
there. One of my primary goals at this (early) stage of my life is to get
better. Hence, having to satisfy very high standards is a good thing.
The project I am proposing aims to provide a high quality C++11-enabled TMP
library. I have been thinking about that for about two years, and I have been
working actively on a potential successor to the MPL named MPL11 [2] for about
9 months. I have looked extensively at other libraries with a similar purpose
to make sure I was constantly aware of the state of the art.
But why would Boost want a C++11-enabled TMP library? First, we can improve
the compile-time performance of some algorithms by using variadic templates
and/or constexpr wisely. Also, a C++11 TMP library could be much lighter to
include; as an example, including all the MPL11 is ~35x faster than including
all the MPL, yet they provide similar functionality. However, compilation time
is not the only improvement in C++11; several constructs become easier to use
(say goodbye to vectorN and friends) and errors become easier to decipher
because we do not need to emulate variadic templates.
Project proposal
================
Concretely, here is a list of MPL11-related tasks I plan to clear during
the summer. Note that full unit testing and documentation is implied for
each task.
- Write a suite of benchmarks to compare the compilation time and memory
usage of different TMP techniques. The benchmarks should run automatically
on different input datasets and produce charts for easy comparison. This
can be done with e.g. Ruby and a Ruby binding for Gnuplot.
- Implement a compile-time map and a compile-time set with variadic templates.
Several implementation techniques should be tested and benchmarked to pick
the best one. For the interface, I'm thinking about an something similar
to Haskell's Data.Map.Strict for the map and to Data.Set for the set. Note
that I will have to decide what kind of type equality to support: type
identity or "deep" type equivalence?
- Write numeric metafunctions that can perform efficiently on homogeneous
sequences of integral constants (using constexpr).
- Setup a Boost-compatible build system; the library currently uses CMake.
- Make std::tuple, MPL sequences and Fusion sequences valid MPL11 sequences,
so they can be used in MPL11 algorithms.
What follow is a list of optional tasks I would like to complete if I have
the time. Again, each task implies full unit testing and documentation.
- Write a tutorial that does not only present the core concepts of the
library, but really shows how to use it for concrete tasks.
- Implement pattern matching on template specializations, much like
Proto's match<> but for arbitrary template specializations. Pattern
modifiers should be provided. At the minimum:
- or_