outcome v2.1.3 Release Notes

Release Date: 2020-04-28 // almost 4 years ago
  • ๐Ÿš€ 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
    0๏ธโƒฃ 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.