Skip to content

v2.1.3 Boost 1.73 release

Compare
Choose a tag to compare
@ned14 ned14 released this 28 Apr 08:44
· 491 commits to develop since this release

v2.1.3 29th April 2020 (Boost 1.73) [release]

The v2.1 branch is expected to be retired end of 2020, with the v2.2 branch
becoming the default. You can use the future v2.2 branch now using
better_optimisation.
This branch has a number of major changes to Outcome v2.1, see the front page
for details.

Enhancements:

  • Performance of Outcome-based code compiled by clang has been greatly improved
    : The previous implementation of Outcome's status bitfield confused clang's
    optimiser, which caused low quality codegen. Unlike most codegen issues, this was
    noticeably in empirical benchmarks of real world code, as was shown by
    P1886 Error speed benchmarking.

    The safe part of the better_optimisation
    Outcome v2.2.0 future branch was merged to Outcome v2.1.3 which includes a new
    status bitfield implementation. This appears to not confuse clang's optimiser,
    and clang 9 produces code which routinely beats GCC 9's code for various canned
    use cases.

  • Precompiled headers are automatically enabled on new enough cmake's for standalone Outcome
    : If on cmake 3.16 or later, its new precompiled headers build support is used
    to tell consumers of the outcome::hl cmake target to precompile Outcome, if
    and only if
    PROJECT_IS_DEPENDENCY is false. PROJECT_IS_DEPENDENCY is set
    by Outcome's CMakeLists.txt if it detects that it was included using
    add_subdirectory(), so for the vast majority of Outcome end users, the use
    of precompiled headers will NOT be enabled.

    Exported targets do NOT request precompilation of headers, as it is
    assumed that importers of the Outcome cmake targets will configure their own
    precompiled headers which incorporate Outcome.

  • Installability is now CI tested per commit
    : Due to installability of standalone Outcome (e.g. make install) breaking
    itself rather more frequently than is ideal, installability is now tested on CI
    per commit.

  • Coroutines support has been documented
    : The coroutines support added in v2.1.2 has now been properly documented.

Bug fixes:

#214
: Newer Concepts implementing compilers were unhappy with the early check for
destructibility of T and E, so removed template constraints, falling back
to static assert which runs later in the type instantiation sequence.

#215
: For standalone Outcome, CMAKE_TOOLCHAIN_FILE is now passed through during
dependency superbuild. This should solve build issues for some embedded toolchain
users.

#220
: A false positive undefined behaviour sanitiser failure in some use cases of
Experimental Outcome was worked around to avoid the failure message.

#221
: Restored compatibility with x86 on Windows, which was failing with link errors.
It was quite surprising that this bug was not reported sooner, but obviously
almost nobody is using Outcome with x86 on Windows.

#223
: Fix a segfault in Debug builds only when cloning a status_code_ptr in
Experimental.Outcome only.