Boost logo

Boost :

From: Jens Seidel (jensseidel_at_[hidden])
Date: 2008-04-24 07:31:22


On Thu, Apr 24, 2008 at 12:37:09PM +0200, Sebastian Redl wrote:
> Jens Seidel wrote:
> > On Thu, Apr 24, 2008 at 09:14:25AM +0400, Vladimir Prus wrote:
> >> 2. If application link to 1.35.0 as dynamic library, then
> >> switching them to use 1.35.1 should not break anything.
> >
> Since most of Boost's libraries are header-only, that's meaningless for
> them. Mostly, anyway.

Right!

> ABI compatibility is to be maintained by the compiled libraries
> foremost, they would have to worry about this the most. It can be done
> with a bit of understanding of the issues and some discipline.

Indeed. I think even changing a public function (ahm, method) from
int f()
to
int f(int c=0)
would create a ABI but no API conflict. One has to be careful.

> The question is, is it worth it?

I'm very sure it is!

> Any application that uses a precompiled
> Boost component probably uses other Boost components, too. As such, the

OK.

> likelihood is high that upgrading Boost means recompiling the
> application.

Please explain this! Probably you mean that beside Boost libraries
also parts of Boost are used which are provided in headers only?
Now you assume that one has to recompile to gain from the header only
parts? This is right but you forgot (if my assumptions are true)
that there is a much more likely case:

Every Linux or *BSD distribution (and probably also Cygwin and Fink)
contains Boost and applications linked against it.
Now assume the Boost maintainer in this distribution wants to
update Boost. With a stable ABI the maintainer just uploads a new
version of Boost and that's all. Without a stable ABI the maintainer
either has to keep the old Boost library (or better librar*ies* in this
case) and provide just another version or the upload of a new Boost
version requires a coordinated upload with all recompiled programs and
libraries which depend on Boost. This is a very big mess!!!!

Debian currently discusses to install multiple versions of Boost.
Currently libboost-dev installs it's header files in the standard search
path /usr/include/boost/*.h. This has to change to support multiple
versions and every program which uses Boost requires updates if no
link to a default version is created.

Such transitions are very time consuming (there could be hundreds of
programs affected). For Debian:

$ grep-dctrl -FBuild-Depends,Build-Depends-Indep -s Package libboost-dev
-n /var/lib/apt/lists/*_Sources

...
d4x
dc-qt
debian-xcontrol
deluge-torrent
enblend
encfs
evolvotron
exmap
fslview
geordi
glob2
gnash
gnuradio
gpsdrive
inkscape
...

That are 50 packages (strange, I expected many more).

> Thus, keeping the ABI is kind of pointless.

No, it isn't. I remember also postings (on this list or on a Debian one)
that some programs do not intent to use Boost because of no stable
API/ABI.

Jens


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk