So I'm going to chime in here, in aggregate. I will try to focus on
answering the question of "What is Boost Good For?" from the
perspective of a user, and as a user having participated in reviews.
It's a large brain dump, so there's probably typos and other bad
things.
[[ Boost and the Ecosystem ]]
In my opinion, Boost is not dead (no great software library is), but
it has waned in usefulness substantially. You don't even have to take
my word for it, Boost authors already did some basic sleuthing about
it:
https://www.reddit.com/r/cpp/comments/gfr46l/why_you_trust_in_boost/
https://www.reddit.com/r/cpp/comments/gfowpq/why_you_dont_use_boost/
You'll note that the "don't use boost" had many more comments and
upvotes, whereas the "trust in boost" had many less comments and
upvotes. Reading both confirms some of my own biases, which is that
Boost, as an ecosystem, does not offer a lot of bang for its buck
because it exists in a space where it competes with the Standard
Library, and does not complement it.
This creates an interesting problem. I could use Boost.Container's
vector, but what benefit does it offer me over std::vector, except
that it has more predictable performance characteristics in
now-10-year-old STLs? (It's not better than the current STL; I
measured.) I could use Boost's type traits, or I could require C++11,
work around GCC4.8 being a nightmare, and no longer have that source
dependency. I could use things from Boost.Core, but I could also just
move to C++11/14 and obsolete many of its usages. And so on, and so
forth.
Opting into the boost ecosystem is expensive, insofar that it's a
really bad trade for interop. I can't talk to external libraries with
Boost's vector, or its unordered map, optional (even if the Standard's
is strictly worse in every way), variant, etc.. Interoperability
matters, which means boost usage in "middleware" libraries -- at least
on its edges and boundaries -- drops off a cliff. Boost is not "the
glue that holds a really shitty C++ universe together" (C++03 and
before), it becomes "the thing that costs me maintenance hours and I
have to spend extra time supporting in my abstractions" (C++11 and
above).
Another point: note that Meeting C++'s survey about regular expression
showed that an OBSCENE number of people used std::regex, despite it
being the literal worst part of every std:: implementation (aside from
wstring_convert), with the reason "because it is there". You need to
make an EXTREMELY compelling sell to get more people to pick up your
library, and if the majority of your libraries are "compete with the
standard", you will lose even if the performance of the Standard is
actual dog poo. Speaking of performance...
[[ Boost and Performance ]]
Further hurting Boost's proposition in the ecosystem is its
performance characteristics and its inability to capitalize on
decades-old ideas. My computer is still shot so I cannot yield the
benchmarks and everything, but finding out that I could read 2 Boost
Author's std papers on allocations and other tricks (Howard Hinnant,
Ion Gaztanaga) and find that neither of the tangible performance gains
they described were implemented in Boost's Allocators or Containers
means I had absolutely no compelling reason to pick Boost over the
Standard for the thing I was rolling (in this case, my own std::vector
or other containers).
Boost -- for its basic abstractions -- do not provide compelling
improvements over the status quo for fundamental things for me to care
enough about Boost alternatives to core things to begin with. (This
changes with things like Peter Dimov's boost::variant2, which offer
tradeoffs I as an application developer are deeply interested in for
many domains, and thus pays off).
This speaks to the ways Boost is used now: for very specific use cases
not covered by the standard, and very specific performance metrics the
standard never will meet.
[[ Boost and Tradeoffs ]]
Unless I pick a very specific library (StaticString, SML, variant2,
Log, String Algorithms, ASIO, Beast, etc.) that offers me a very
tangible gain in "yes, absolutely, this accelerates my development and
has acceptable performance characteristics", Boost's general core is
not worth it. It's monolithic nature makes it hard to opt into many of
its smaller libraries "just because". Distribution is often an extreme
pain in the ass. Build system gripes are ripe in the reddit threads,
and there's been at least 3 (!!) official,
they-recorded-this-for-1+-hours-and-practiced-this-for-many-more-hours
talks about getting Boost to different build systems and modularizing
boost. If that isn't enough of an indication that Boost's method of
distribution maybe needs to be looked at more closely, I honestly
don't know how to explain the need better!
Before, that monolith was great: the Standard was, quite frankly, hot
steaming garbage so Boost's core made all that go away and provided
stability amongst the insanity of many compilers. That is not the case
anymore, and accepting the costs of the monolith in exchange for only
a handful of libraries is often a far worse trade, especially if that
library does not come with distinct gains. This is why people keep
asking for "Boost, but based on a higher standard"; this is not just
because "unga bunga cruft bad", it's because they want to see /more/
useful libraries that pushed the boundaries of C++ farther out than
ever before, just like Boost did in the 2000's.
[[ Boost and The People's Needs ]]
As I stated before, people's needs have shifted. C++ is not The
Badlands anymore, and even MSVC is coming out to play nice. Boost is
having a problem addressing the needs people have, today, which are
sometimes extremely niche. This is why I am partly disappointed by the
result of the Text Review.
As I stated in my review, Text in C++ sucks. Boost does not do better
than the Standard, save for some string algorithms and some basic
Locale "improvements". This was a chance, even if not perfect, to
provide a library that really made Boost stand out as "has something
the Standard can only dream of". boost::text's "text" container -- as
the kids would say -- slapped. Grapheme cluster iterators, utf8
storage, insertion and removal based on what most people perceive as
characters handled transparently for me?? That's the wet dream of text
management. Coupled with a Stepanov reimagining of Standard Unicode
algorithms that were just a straight translation of the pointer-based,
weird ICU interfaces, absolutely. Yes, not having allocators was
terrible and not having the ability to choose underlying encoding
sucked, but it got *most* people a good chunk of the way. There was
room for going backwards and filling out the problems in v2.
Not having the library -- and encouraging the text layer not to come
back as part of the next resubmission of the library -- is a huge blow
to "this really addresses one of the serious contemporary C++
problems". Maybe Zach will resubmit that layer, but we missed out on
the sweet spot of addressing a need that neither Standard C++ nor most
shops handle nicely. I do hope the library comes back!
This also speaks to LEWG. In all frankness, if Boost's purpose is to
be invalidated by the Standard every 3 or 6 years, why waste the time
submitting to Boost when Boost is just "standard, but outside and
sometimes before the standard"? If your goal becomes "Lots of C++11
that fill the gaps", well then duh nobody's going to submit new stuff
to Boost because you've made it explicitly clear your job is being a
polyfill for old libraries, not providing new, cutting edge libraries
like 20-years-ago Boost was.
[[ In Conclusion ]]
Boost is successful. Not was: is. But its original space has been
consumed by the standard, and if we want to enjoy a "Boost
Renaissance", we need to address people's needs and meet them where
they are, rather than keep trying to pull them into a way of Boost
that is, quite frankly, no longer necessary in many ways. Higher
standards. Libraries that provide good tradeoffs. Libraries that
address the needs that are going out in front of people today, not the
needs 10 or 15 years ago.
Boost may need to actually reach out to people and very much handhold
them through the process of library submission, review, and
improvement to convince a few key cases that Boost is still extremely
relevant to modern needs. Maybe that will bring in even more folk;
encourage them to submit here, once they see that Boost libraries are
once more the place to go to solve real problems, with a tangible
feedback loop. Right now it's hard to gauge the effect of a Boost
library, since Boost is doing very little to distinguish itself from
the Standard (again, why go through Boost if you can do GitHub + LEWGI
+ LEWG + LWG instead?). Boost should be the cutting edge again. This
does not mean the quality has to go down: but there should be active
encouragement of exploration of new topics OR addressing people's
needs. Boost.Text, Boost.Unicode, maybe even Boost.Audio, and more...
[[ Mailing Lists and Tools In General ]]
Mailing lists are fine for power users. And yes, I really mean power users!
This could be my young buck inexperience showing, but there is a real
problem with having to manage a lot of these things yourself. While
people can configure amazing awesome mail clients capable of great
feats, most of us don't have anything like that. Some small examples:
- I had no idea what "top posting" was until someone informed me that
(by default) g-mail's reply feature was automatically top posting.
There is, of course, no way to change this in the options, but it is
still against Boost etiquette to do so. So now I need to manually
relocate the start of my post, and I have to do this every time I
start an e-mail.
- Tracking threads is hilarious in an e-mail client. This single post
has ended up in 3-4 different threads, sometimes because some people's
mailing client clears out response IDs and other times because it was
a deliberate fork. I have no idea, and now I have to track the 4
threads to this, often without any context of where this thing came
from even if I scroll up *this* thread in particular.
- Formatting. Boost's mailing list is nice enough to accept my HTML
e-mails, but I have no assurance my e-mails are <b>NOT</b> showing up
<i>strangely</i> for everyone now with weird things (so I have to
default to plain text and, essentially, make up some form of /markup/
in my head or use what I've observed about the mailing list).
Consistent formatting (e.g., "everyone uses markdown and that's what
renders") brokers a common ground between mailing list users for code
formatting, emphasis, and general text decorum / presentation.
Basically, mailing lists are wild-wild wests of formatting and
quality. A platform that got rid of that etiquette and just let me
conform to an established format (GitHub Issues, etc.) greatly lowers
the barrier to being able to speak up.
On Tue, Jun 30, 2020 at 12:41 PM Andrey Semashev via Boost
On 2020-06-30 19:32, Peter Barker via Boost wrote:
On Tue, 30 Jun 2020 at 17:12, Andrey Semashev via Boost < boost@lists.boost.org> wrote:
On 2020-06-30 18:30, Peter Barker via Boost wrote:
On Tue, 30 Jun 2020 at 11:03, Andrey Semashev via Boost < boost@lists.boost.org> wrote:
On 2020-06-30 12:42, Vinnie Falco via Boost wrote:
On Tue, Jun 30, 2020 at 12:39 AM Mike via Boost
wrote:
> Why are people equating forums with SO?
That was my unfortunate mistake. I only used the comparison to highlight how the immediacy of visiting a website is different from having to register for a mailing list.
You still have to register on StackOverflow.
Only to post, upvote and comment, etc. You don't have to register if you want to visit and browse the questions and answers. If Boost moved to a forum it'd be analogous.
You can browse mail list archive without registration.
I was just correcting your statement about needing to register on StackOverflow.
And I was pointing out that there is no difference between StackOverflow and mailing list in terms of immediacy of access.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost