Boost logo

Boost :

From: Beman Dawes (bdawes_at_[hidden])
Date: 2002-08-06 07:44:41


At 08:45 PM 8/5/2002, Glen Knowles wrote:

From: William E. Kempf [mailto:williamkempf_at_[hidden]]
> In Eric's defense, the use of #ifdef's in Boost.Threads is generally not

> done to "assist... deficient compiler(s)" but to provide platform
specific
> implementations. His argument is that there are other ways to do the
same
> thing with more "clarity", but the problem is that this view is only an
> opinion, and one that was strongly argued against by the majority of the

> Boost membership (at least in regards to this specific library). I have

> sympathy for his opinion, if not with his presentation and even if I
find
> the opinion of the majority to be more compelling.

I'm not sure his suggested implementation was addressed. My understanding
is
that he was advocating separate files for the implementations of, at least,

the major operating system "families". This would compile only the files
required for a given platform, with the hope of needing much less #ifdef
clutter. Not the pimpl idiom, unless you wanted to classify it as a compile

time pimpl. :)

You just can't win on this question. In the alpha of boost::filesystem, I
had separate implementation files for POSIX and Windows. I got complaints
about that. I changed to single files with #ifs, and got a complaint about
that.

The key factors to me were that with the single file with #ifs:

* It made maintenance easier and prevented divergence of semantics between
implementations. Note that the majority of the code was not within #ifs,
and so appeared only in one place instead of two.

* It was easier to inspect to determine if the two implementations had the
same semantics.

* It made compilation and test easier.

* Over time, and in ways I can't quite put my finger on, the single file
with #ifs just came to feel like better software engineering. KISS I guess.

--Beman


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