Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Revision history
PrevUpHome

Boost 1.74

  • New features
    • New axis boolean, a special kind of integer axis with only two values and no state (except metadata)
    • Histograms with growing category axes are now addable even if the categories differ; the category axis of the output histogram is the union of the category axes of the input histograms
    • Added axis::traits::continuous to match axis::traits::is_continuous
  • Fixes
    • metadata() method of builtin axis types now return a mutable reference even if the axis is const, as described in the documentation
  • Documentation
    • Sorted headers in reference and sorted items in namespaces
    • Removed some internal typenames from templates
    • Added reference for sample_type
  • Other
    • Simplified internal metaprogramming
    • Replaced Boost Assert with plain cassert

Boost 1.73

  • New features
    • accumulators
      • New count accumulator, a thin wrapper around a primitive arithmetic type; serves as a base class for users who want to add arbitrary metadata to each bin
      • sum gained a value() method for consistency with other accumulators
    • algorithm
      • reduce
        • Now supports positional commands
        • category axis now supports slice command
        • Added crop command, like shrink, but discards content of removed bins
        • Renamed reduce_option to reduce_command (old name available but deprecated)
      • sum gained a new argument, allowing users to select whether to sum over all bins or only the inner bins (excluding underflow and overflow)
    • axis::traits
      • Added traits is_ordered and ordered to distinguish between different kinds of DiscreteAxis types; used internally to handle category axis and integer axis differently
      • Renamed static_options to get_options and static_is_inclusive to is_inclusive (old names available but deprecated)
  • Fixes
    • Fixed failing ODR test in bundled Boost due to wrong paths
    • Fixed a bug in histogram::operator*= that could occur in user-defined accumulators
    • Fixed a bug in indexed which could cause arithmetic past the end position
    • Fixed a bug where the variance in accumulators::weighted_sum was not correctly computed if a normal histogram was added to the histogram that used accumulators::weighted_sum
    • Fixed a bug where compiling with -ffast-math would break accumulators::sum
    • Fixed algorithm::reduce to work with axes without *flow bins, which did not compile before
  • Other
    • Added an example and documentation on how to use Boost.Histogram as a backend
    • Improved the docs on how to use custom accumulators and Boost.Accumulators
    • Many small documentation improvements
    • Improved docs for algorithm::reduce
    • Improved experimental cmake build support
    • Use index_type consistently everywhere instead of raw int
    • Benchmark update in the docs

Boost 1.72

  • New features
    • Better deduction guides for axis types and histogram type on C++17 compilers
    • performance improvements in the indexing code
    • new histogram::fill method for accelerated filling from chunks of values
    • ASCII bar charts for 1D histograms when boost/histogram/ostream.hpp is included (contributed by Przemyslaw Bartosik)
    • Passing invalid axis options causes user-friendly compile-time errors
    • Wrong usage of weight() and sample() causes user-friendly compile-time errors
    • algorithm::empty returns true if all histogram values are equal to the default value (contributed by Henry Schreiner)
    • algorithm::reduce with shrink is now well defined when values are not bin edges
    • axis::traits::rank returns the number of values that this axis accepts
    • axis::traits::is_continuous returns whether an axis is continuous or discrete
    • axis::traits::is_inclusive returns whether an axis has a bin for any possible input
    • limited weight support for mean accumulator
    • accumulators::weighted_mean::sum_of_weights_squared method added
  • Fixes
    • Support of -std=c++2a and -stdlib=libc++ on clang, compatibility with gcc-9
    • Fixed: weight could be passed instead of a sample during filling without triggering an error
    • Fixed: segfault when too many indices were passed to algorithm::project
    • Fixed: indexed range generator did not work with storage based on std::array
    • Fixed: weighted_mean() + weighted_mean() != weighted_mean() (discovered and reported by Henry Schreiner)
    • Fixed: axis::option::test(...) returned true if any bits in the test mask were set (now returns true if all bits in the test mask are set)
    • Protecting calls to min, max with against macro expansion
    • Replaced all crlf with lf in concepts.qbk
    • Missing throw of std::invalid_argument when user passes too many axes to histogram
    • Corrected documentation of serialization support in concepts section
    • Resolved warnings for various compiler versions
  • Other
    • Added Boost.Histogram logo
    • Added missing copyright notices
    • axis::category::value returns copy for scalar types and const reference otherwise
    • std::ostringstream not used anymore to generate exception messages to reduces code bloat
    • Documentation improvements
      • Restructured overview section in documentation
      • Updated user guide to demonstrate new features
      • Updated accumulator examples
      • Concepts explain how accumulators can optionally accept weights
    • Updated benchmark code
    • New test checks consistency of b2 and cmake build systems
    • New test checks One-Definition-Rule (fails if non-templated function is not declared inline)
    • Serialization code decoupled from Boost.Serialization
    • Removed dependency on Boost.CallableTraits

Boost 1.71

  • New features
    • Thread-safe accumulators boost::histogram::accumulators::thread_safe based on std::atomics
    • Support for thread-safe storages
    • Support for compiling without exceptions/RTTI (increases performance by 10-20 %) [with contributions from Glen Fernandez]
    • Performance improvements for 1D and 2D histograms
    • boost::histogram::indexed now returns forward iterator range instead of input iterator range
    • boost::histogram::indexed_range::accessor is now non-copyable and acts like reference to cell value, making most algorithms from the stdlib work
    • boost::histogram::algorithm::reduce
      • New slice option
      • Fuse shrink, slice, and rebin options passed for the same axis
      • Support histograms with some axis types with reduction support
    • boost::histogram::algorithm::project accepts runtime indices for static histograms
  • Fixes
    • boost::histogram::algorithm::reduce also works on histograms that have some axis types without reduction support
    • boost::histogram::axis::traits::update now works correctly for boost::histogram::axis::variant
  • Other
    • 100 % test coverage
    • Drastically reduced internal Boost dependencies
    • Improved documentation and examples
    • Internally replaced boost::variant with boost::variant2
    • boost::histogram::axis::traits::is_reducible detects reducible axis types
    • Cleanup and refactoring of internals
    • Guarantee no-throw moves for all builtin axis types
    • Improved internal benchmarks
    • Compile cleanly at higher warning levels

Boost 1.70

First Boost release, version 4.0 in former internal counting.

  • Removed Python bindings, will be developed in separate repository
  • All axes can be made optionally circular, except category axis
  • All axes now support generic attached metadata
  • All axes have now independently configurable underflow/overflow extra bins
  • Removed circular axis (which is just a circular regular axis)
  • Added indexed adaptor generator for convenient and fast iteration over histograms
  • Support for axes that can grow in range
  • Support for axes which accept multiple values (example: hexagonal binning)
  • Support for profiles and more generally, arbitrary accumulators in each cell
  • Support for serializing to xml archives
  • Added compatibility with Boost.Range, Boost.Units, and Boost.Accumulators
  • Added deduction guides for axis types and histogram
  • Performance improvements
  • Renamed adaptive_storage to unlimited_storage
  • Replaced boost::multiprecision::cpp_int with custom type to decouple libraries
  • Internal simplification of axis::variant
  • Make all storages behave more like containers, simplifying the design
  • Histograms supports add, sub, mul, div
  • replaced operator[] in axis with explicit method bin
  • replaced operator() in axis with explicit method index
  • replaced internal use of boost::containers with stdlib containers
  • Much improved docs, reference documentation, user guide, more examples

3.2 (not in Boost)

  • Allocator support everywhere
  • Internal refactoring

3.1 (not in Boost)

  • Renamed bincount method to size
  • Support for axes with only overflow and no underflow bin
  • category axis now by default has bin for "other" input that does not fall into the predefined categories, making it consistent with other axes
  • NaN is now consistently put into overflow bin for all axes
  • Eliminated warnings about safe internal conversions on MSVC
  • Established a cpp house style with corresponding .clang-format file
  • Better detection of Python library on all systems
  • Improved code coverage by testing more input errors
  • Raise ValueError instead of generic RuntimeError in Python on input errors

3.0 (not in Boost)

  • Support for efficient adding of multiple histograms and scaling
  • Re-design of category axis as a general mapping between unique values and bins
  • Re-design of the bin description an axis returns upon element access
  • Interface cleanup and simplification, more consistency between Python and C++ interface
  • Iterators for histogram and axes for STL compatibility
  • Regular axis in C++: Allowing transforms with state
  • Regular axis in Python: Support for all C++ transforms
  • Polymorphic axis::any type
  • Internal refactoring from boost::mpl and boost::fusion to std::tuple and boost::mp11
  • Windows support

2.0 (not in Boost)

  • Added static_histogram (v1.0 only had dynamic_histogram).
  • Merged wfill(...) and fill(...) interface.
  • Support custom allocators in storage classes.
  • Replaced static_storage with array_storage.
  • Replaced dynamic_storage with unlimited_storage, which adds the capability to grow the bin counter into a cpp_int, thus avoiding integer overflow completely.
  • Serialization uses binary_archive instead of text_archive. The latter is portable, but the performance is terrible.
  • Python interface changed: histograms are now iterable, returning axis classes
  • Support reduction (removing a subset of axes and returning the equivalent histogram; in other words, those axes are integrated over)

1.0 (not in Boost)

  • First stable version.

PrevUpHome