Subject: Re: [boost] New libraries implementing C++11 features in C++03
From: Nathan Ridge (zeratul976_at_[hidden])
Date: 2011-11-23 15:54:39
> There as a discussion before where a proposition was to have two high
> versions of boost : 1.xx (like the current ones) that would be guaranteed
> to work with C++03 compilers, 2.xx that would require C++11 compilers.
> 1.xx would contain all the libraries but the ones requiring C++11
> 2.xx would contain all the libraries but the but the ones that cannot work
> on a C++11 compiler (I guess none) plus libraries (and versions of
> libraries) requiring C++11.
> Maybe 2.xx could even remove libraries that would be considered obsolete by
> the new standard. That would be too much work I guess.
I like this idea. Here's how I envision it might work:
- At some point, we decide to fork Boost into Boost v1 and Boost v2. This will
probably have to wait until the major compilers have reasonably complete
C++11 support, so we don't have to be backwards-compatible to incomplete
C++11 implementations. Obviously small issues can be worked around, but
the big features should be there. At the moment of the fork, all libraries are
- Library authors/maintainers who are not interested in C++11 yet can continue
treating the v1 and v2 forks of their libraries as one, making identical changes
to both versions.
- Library authors/maintainers interested in C++11 can start adding C++11
features to their v2 forks, or refactoring their v2 forks to take advantage of
C++11 features (e.g. refactoring Boost.Fusion to use variadic templates).
- For libraries which have started using C++11 in v2, and therefore their v1 and v2
forks are different, all new features and bug fixes would go into the v2 fork only
by default. If it's a bug fix, or a feature that is possible even in the C++03 v1
implementation, and the library maintainer, or someone else, cares to do so,
they can back-port the new feature to the v1 fork.
- For libraries that are obsoleted by C++11, such as Boost.Move or Boost.Tuple,
they would be kept around in v2 until all v2 forks that depend on them have
been refactored to use the C++11 equivalents, at which point they will be
deprecated and ultimately removed. Boost users who have upgraded to v2 have
until this time to refactor their own code to use the C++11 equivalents as well.
- Over time, there will be less and less interested in C++03 support, and the v1
fork will begin to fall into disuse. Ultimately, it too will be deprecated and removed
(this will probably be in 10 years or more, by my guess).