Boost logo

Boost :

From: Beth Jacobson (bethj_at_[hidden])
Date: 2006-02-20 16:06:35


David Abrahams wrote:

> This
> category also suggests that anything you haven't put there is somehow
> less sophisticated.

I tried to differentiate between the groups without making either the
more traditional methods sound inferior or the newer ones sound too
experimental. Sounds like I failed on both counts.

>
> The whole idea of a "simple/advanced/cutting-edge" hierarchy doesn't
> seem to work, to me. I'm looking at Boost.Random in the simple
> category, for example. From my point of view, understanding what that
> library provides requires a deep understanding of numerical issues
> that's out of reach for most programmers.

True, but looking at random_demo.cpp, I see that I can put Random to
good use without knowing any of that. This is in contrast to things like
call_traits and enable_if which aren't much use to anyone unfamiliar
with generic programming. My goal was to separate out those sorts of
libraries, so people could browse just the ones that might be of
interest to them. Unfortunately, that runs into the the same problem as
above: how to do that without creating an artificial inferior/suporior
or practical/experimental dichotomy between them.

[snip}

>
>>The intent of the page is to encourage people to explore the Boost
>>libraries. I tried to create categories that would appeal to various
>>interests and ability levels
>
>
> Good idea; the execution isn't there yet, though.
>
>
>>and that would give a broad overview of the
>>sorts of things Boost has to offer.
>
>
> Also good. If you list all the libraries you can't help but do that
> :)
>

The current library list proves that isn't necessarily true. :) Names
like "any" don't mean much to newbies, and while some of the
descriptions are fine, others are no more helpful than the names. Even
more that good categorization, better descriptions would help a lot in
making Boost more accessable to new users.

[snip}

>
> Okay, let me take a shot at
> this. The category I'm least sure about is "system-level." It feels
> right, but I can't justify it.

I agree. It seems like a natural grouping somehow, but it's a little
hard to describe exactly what all those libraries have in common. The
first 5 are similar in that they're all clear-cut choices. Most of the
time, you'd know whether you had any use for program options, date-time,
filesystem, threads, or serialization just by looking at your client
specs. The decision to use signals, pool, or Python isn't quite so
obvious, but they're also pretty basic design decisions.

This is an attempt to fit everything
> into a single category, unlike Boost's current list. I don't feel as
> though any of the library is being badly shortchanged or pigeonholed,
> but others may disagree. I copied the libs from Beth's list, but it
> seems short; Beth, are you sure you didn't miss anything?

Something may have gotten lost in the shuffle, but that's most of them.
The list may look short because I took out the listings for individual
math functions. I figured that for someone interested in those sorts of
things, the word "math" would be enough to inspire them to look at the
library docs themselves.

I think this categorization is the best I've seen so far (mine
included). I'd like to see no more than 7-8 major categories though, to
make the list seem more accessable and browsable. How about if we
grouped some of your categories like this:
>
** Language Enhancements (change the one below to "C++ Core Enhancements")
> * Language Enhancements - libraries that make the standard C++ core
> language easier and safer to use, or extend its capabilities in
> "language-like" ways. Many relieve common frustrations of
> programmers with the C++ language.
>
> Datatypes: variant, optional/in-place-factories, tribool, integer
>
> Language extensions: foreach, enable_if, parameter, ref
>
> Safety: conversion, value_initialized, checked_delete,
>
> * Standard Library Enhancements - libraries that make the standard C++
> library easier and safer to use or extend its capabilities in
> evolutionary ways. Many relieve frustrations commonly encountered
> when using the standard library (see also Functional Programming)
>
> IO: io state saver, iostreams, format
>
> Containers/data structures:
> assign, pointer container, array, bitset, multi_index,
> multi-array, tuple
>
> Iterators: iterators, next/prior, range
>
> Algorithms: minmax
>

** Program Development Utilities
> * Class definition utilities
>
> operators, noncopyable, base_from_member, compressed_pair
>
> * Type information, synthesis, and computation
>
> Type Traits, Call Traits, MPL
>
> * Functional Programming - libraries for working with functions and
> function objects. Especially useful in conjunction with STL
> algorithms, but any program can benefit from functional programming
> idioms.
>
> lambda (see also bind), bind/mem_fn (see also lambda), functional
> (deprecated), function
>

** Text and Number Handling - These range from enhancements to improve
accuracy and performance to full-featured libraries suitable for
advanced text and mathematical processing.

> * Numerics, number crunching, high-performance computing.
>
> CRC, functional/hash, random, rational, graph/property map,
> interval, math, ublas
>
> * Parsing and Text Processing
>
> Regex, XPressive, Spirit, tokenizer, string_algo
>

(The rest stay as they are)

> * System-level libraries
>
> Program options, date-time, filesystem, threads, serialization,
> signals, pool, Python
>
> * Testing and debugging
>
> timer, static_assert (see also MPL assert), concept check, test,
>
> * Code Generation
>
> Preprocessor, wave
>
> * Portability
>
> compatibility, config
>


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