Compatibility between boost versions

My company is currently developing a new set of software packages (applications, static and dynamic libraries) that are all expected to work together (i.e., the libraries will be linked to more than one of the applications, and the libraries will interoperate and depend on one another). In addition, the system has to be extensible, i.e. new DLLs will be added in the future without requiring to rebuild the other components. I use many parts of the boost libraries, not only for the implementation details, but also in the interfaces of the libraries (e.g. the iterator adaptors, type_traits, call_traits, variant, mpl...). This leads to the question: are different versions of the boost libraries compatible with each other? Can I use a newer version of boost in future additions to our system and expect them to work together or will we have to rebuild the whole system when we decide to use a new version of boost? I don't expect a definite answer to this complex question, but is it possible to estimate how likely it is that newer versions of boost will require us to rebuild all? Best regards, Klaus

On Jul 14, 2004, at 9:06 AM, Klaus Nowikow wrote:
This leads to the question: are different versions of the boost libraries compatible with each other? Can I use a newer version of boost in future additions to our system and expect them to work together or will we have to rebuild the whole system when we decide to use a new version of boost?
We typically try to retain source-level compatibility between Boost versions, but make little or no effort to retain the binary compatibility that you would need. The basic problem is that merely breathing on a template metaprogram breaks binary compatibility, and nearly every Boost library requires some form of metaprogramming. You will probably have to standardize on a particular Boost version, compiler, and standard library :( Doug

Klaus Nowikow wrote:
My company is currently developing a new set of software packages (applications, static and dynamic libraries) that are all expected to work together (i.e., the libraries will be linked to more than one of the applications, and the libraries will interoperate and depend on one another). In addition, the system has to be extensible, i.e. new DLLs will be added in the future without requiring to rebuild the other components.
I use many parts of the boost libraries, not only for the implementation details, but also in the interfaces of the libraries (e.g. the iterator adaptors, type_traits, call_traits, variant, mpl...).
This leads to the question: are different versions of the boost libraries compatible with each other? Can I use a newer version of boost in future additions to our system and expect them to work together or will we have to rebuild the whole system when we decide to use a new version of boost?
I don't expect a definite answer to this complex question, but is it possible to estimate how likely it is that newer versions of boost will require us to rebuild all?
The track record here is not very good. For example the last 2 releases IIRC both broke boost::random source compatibility. In one case it was not even mentioned in the release notes. The behavior silently changed, yielding different numerical results (no compile errors).
participants (3)
-
Doug Gregor
-
Klaus Nowikow
-
Neal D. Becker