Overall Goals

We aspire for Elevate to be for .NET what Boost is for C++. Content wise, this means that the library should contain "the things that you wish were in the BCL".

We don't mean to imply that the Base Class Library is bad, but the facts are that the BCL team has finite resources, and they have to cater to all .NET developers. With Elevate, we can focus on features that a large subset of .NET developers want, and we can draw on contributions from the entire community. We know that the BCL may eventually implement some of the features in Elevate. When this happens, we will deprecate those APIs, and defer to the BCL implementation.

Like Boost, we want to hold Elevate to a very high standard of quality. Right now, this means tests, and following coding standards to be like the BCL. Eventually, we would like to implement a review process to ensure quality and prevent feature bloat.


Elevate should be dead simple to pick up and use quickly. We don't want users to to have to understand every feature before being able to use the ones they want. One of the ways we are facilitating this is through the Elevate.Guide test project.

The primary goal of Elevate.Guide is to be living documentation of the library. As Elevate matures, we want new users to use the Guide to understand and be able to use the features in Elevate within a few minutes. We aim to organize the tests in Guide like a document describing the library instead of following a strict "test by fixture" or "test by feature" approach. We also want to enhance the readability of these tests so that they are almost like reading a PDF document. This means that we are open to annotating them with comments.

Next Steps

For the next release of Elevate:
  • Clean up some of the naming issues in the first release to be more in line with what the BCL uses and remove duplicate features in a couple cases.
  • Continue implementing functional programming features, specifically targeting functions from F#'s Seq and List modules that are missing in the 3.0 BCL.

Release after next:
  • IList extensions - slicing, new IList types, improve/restructure Guide for lists, etc.
  • String extensions- create extension methods for some common static string methods, split using string/regex, etc.

Looking ahead to .NET 4.0:
  • Determine a strategy for supporting 3.5 and 4.0 branches of Elevate.
  • Add functionality to Elevate to leverage new 4.0 features.
  • Deprecate features that present in 4.0.
  • Evaluate pros and cons of replacing our implementation of F# functions with calls to .NET 4.0 F# assemblies.

  • Implement a review process for all code in Elevate.
  • Draw features from libraries like Boost, and standard libraries in languages like Ruby, Haskell, and Python.

Last edited Oct 27, 2009 at 3:55 PM by chrismarinos, version 7


chrismarinos Oct 21, 2009 at 3:02 PM 
@mattraffel- That's a good point. We left this open ended on purpose to capture the general spirit of what we want to accomplish. As we get closer to that "future" item, we'll go into more detail about what features from boost we want.

mattraffel Oct 19, 2009 at 12:56 PM 
Boost provided a lot of functionality for C++ that isn't necessarily missing in .NET. I would like to see a roadmap that specifies exactly functionality that is intended to be in future releases of Elevate rather than "Draw features from libraries like Boost"