Skip to content

CHANGELOG

2.3.3

  1. Resume multiple callers of promise_caller_manager (C++20 coroutine) and stackful_channel_context_base (stackful channel) in registration (FIFO) order instead of hash order. The multi-caller containers are now a dual index of an order-preserving list and a hash map, so waiters queued behind the same task or channel wake in the order they registered, matching the legacy stackful next_list behavior, while dedup-on-add and passive removal stay O(1). Duplicate registrations of the same handle are now also ignored when LIBCOPP_MACRO_ENABLE_STD_VARIANT is off. FIFO order and deduplication are preserved when the first caller is removed and callers are registered again.
  2. Update dependencies.
  3. Update benchmark results.

2.3.2

  1. Rewrite document.
  2. Support cmake 4+.

2.3.1

  1. Fixes storage types in generator_vtable.
  2. Fixes format rule.

2.3.0

  1. Rename all macros COPP_* to LIBCOPP_* .
  2. Make all macros in compile_optimize.h and explicit_declare. standalone from atframework.
  3. Merge boost.fcontext 1.87.
  4. Remove LIBCOPP_MACRO_HAS_EXCEPTION.
  5. Add nostd type_traits and strong_rc_ptr for non thread-safety smart pointer.
  6. Remove LIBCOPP_DISABLE_ATOMIC_LOCK, LIBCOPP_LOCK_DISABLE_THIS_MT and LIBCOPP_LOCK_DISABLE_MT. We use the only one option LIBCOPP_ENABLE_MULTI_THREAD now.
  7. Allow to disable multi-thread support for stack pool and C++20 coroutine to reduce cache miss.
  8. We allow use lightweight callback or channel mode(without callback) for C++20 coroutine generator.
  9. Add copp::make_channel<T>() to create channel receiver and sender for easier usage.

2.2.0

  1. Merge boost.fcontext 1.81.0
  2. Add LIBCOPP_MACRO_TLS_STACK_PROTECTOR to work with -fstack-protector
  3. Optimize -pthread flag detection.
  4. Support -fno-rtti now.
  5. Optimize timestamp of generated file to reduce regeneration.

2.1.4

  1. Fixes timer reset when initialization.(#46 )
  2. Update CI environment of GCC 4.8.
  3. Add more strict warnings.
  4. Optimize spin lock, add valid() for task_promise(C++ 20 coroutine).
  5. Fix consistent of variant detection.

2.1.2

  • Update cmake-toolset
  • Implement unhandled_exception when without exception.

2.1.1

  • Add helper function to pick task id and private data from C++20 coroutine task
  • Fix trivial test
  • Fix Valgrind_ROOT
  • Fix compatibility of GCC SFINAE
  • [CI] Add CodeQL job
  • [CI] Add auto stale job
  • [CI] Update linux image to ubuntu 22.04

2.1.0

  1. Allow custom promise_error_transform for C++20 coroutine.

2.0.2

  1. Add benchmark for task_future
  2. Fix lifetime of task_future

2.0.1

  1. Change task_manager<task_type, container_type> to task_manager<task_type>

2.0.0

  1. Add ABI tag for all c++ codes

    We will keep ABI compatitablity for all assemblly APIs and will change the suffix when ABI changed.

  2. cotask::task changes
  3. [x] Add value_type to task_macro ( macro_coroutine )
  4. [Previous] Redesign C++ 20 coroutine support.
  5. Using ctest to maintain test and samples
  6. Fix compatibility for C++20 attributes and macros
  7. [BREAK CHANGES] Rename LIBCOPP_DISABLE_THIS_MT to LIBCOPP_LOCK_DISABLE_THIS_MT

1.5.0

  1. [BREAK CHANGES] We need gcc 4.8+, Clang 4.0+ or MSVC 1900(Visual Studio 2017)+
  2. Remove COPP_MACRO_ENABLE_VARIADIC_TEMPLATE
  3. Remove STD_DECLTYPE , COPP_MACRO_TYPEOF
  4. Remove libcopp/utils/std/decltype.h
  5. Remove libcopp/utils/config/compiler_features.h
  6. Remove libcopp/utils/std/functional.h
  7. Remove libcopp/utils/std/smart_ptr.h

1.4.1

  1. [OPTIMIZE] Allow to download submodule by external tool and do not depend git.

1.4.0

  1. [OPTIMIZE] Switch build system to to cmake-toolset
  2. [FIX] Fix output names of find_package(<PackageName>)
  3. [OPTIMIZE] Support auto detection of ios/android toolchains
  4. [OPTIMIZE] Fix warnings when using cmake 3.20.0 or upper
  5. [OPTIMIZE] Optimize cmake config PATH for <PackageName>_DIR
  6. [BREAK] Upgrade cmake requirement to 3.16.0+
  7. [CI] Move to github action
  8. [BOOST] Merge boost.context 1.76.0.

1.3.5

  1. [FIX] Fix stack alignment.
  2. [OPTIMIZE] Prefer to use python3 on cmake scripts.

1.3.4

  1. [FIX] Fix version tag.

1.3.3

  1. [BOOST] Merge boost.context 1.74.0(Support The 32-bit Solaris C language data model, called ILP32).
  2. [FIX] Fix mixed some headers with atframe_utils .
  3. [OPTIMIZE] Some optimizations for benchmark codes.
  4. [FIX] Fix multi-thread counter of unit test.
  5. [OPTIMIZE] Support cpack to generate rpm or deb package.
  6. [FIX] Fix c++20 coroutine flags when reimport CompilerOption.cmake.

1.3.2

  1. [FIX] #16 : document of LIBCOPP_DISABLE_ATOMIC_LOCK and LIBCOPP_DISABLE_THIS_MT .
  2. [FIX] #18 : 'xx' is not a member of 'xxx {aka xxx}' .
  3. [OPTIMIZE] cotask::task can capture all integer type of return value now.
  4. [FIX] Remove warning of c++20 coroutine options when project use both languages of cxx and not cxx

1.3.1 (2020-07-06)

  1. Fix compiler version checker for C++20 coroutine
  2. Add cmake interface option and features for targets
  3. Update documents

1.3.0 (2020-07-02)

  1. [OPTIMIZE] Using cmake export to generate module files
  2. [OPTIMIZE] Change default visibility of symbols to hidden, we support dll on windows now.
  3. [FIX] Rename task::await`` intotask::await_task, Some compile don't allowawait_task` as function name.
  4. [BOOST] Merge boost.context 1.73.0
  5. [FEATURE] Implement context of windows fiber and SetUnhandledExceptionFilter is available to catchunhandled exception in coroutine action
  6. [OPTIMIZE] Catch and rethrow unhandle exception after coroutine resumed when using C++11 or upper, most APIs are exception safe now.
  7. [OPTIMIZE] Remove TTASK_MACRO in cotask::task, task id now is always set uint64_t and use the id allocator with thread cache.
  8. [OPTIMIZE] Fix Warning: client switching stacks? in unit test when enable valgrind support.
  9. [FEATURE] Enable -DLIBCOPP_FCONTEXT_USE_TSX=ON for default.

BREAK CHANGES & UPGRADE GUIDE FROM 1.2.X

  • Rename cotask::task::await into cotask::task::await_task
  • Replace cotask::task<TCO_MACRO, TTASK_MACRO> with cotask::task<TCO_MACRO>, we don't allow to custom id allocator now.
  • Replace cotask::core::standard_int_id_allocator<uint64_t> with copp::util::uint64_id_allocator, we don't allow to custom id allocator now.
  • Require gcc 4.7+, MSVC 14+ (Visual Studio 2015)
  • Require cmake 3.12.0 or upper

1.2.1 (2019-10-04)

  1. [OPTIMIZE] Add options to disable TLS usage for this_task and this_coroutine to reduce cache miss on single thread situation.
  2. [OPTIMIZE] Implement jump_to(...) as static inline to reduce code cache miss.
  3. [OPTIMIZE] Implement coroutine_context_callback(...) as static local symbol to reduce code cache miss.

1.2.0 (2019-08-20)

  1. [OPTIMIZE] Add more unit test.Increase coverage to 90%+.
  2. [OPTIMIZE] Rewrite toolchain detection scripts, support clang-cl now.
  3. [BOOST] merge boost.context 1.71.0.
  4. [FIX] Fix a coredump problem when task_ptr is reset when await_task other tasks.
  5. [OPTIMIZE] Optimize timer implement, task_manager support modify task timer now.
  6. [OPTIMIZE] A task can only be added to one task_manager now, and when finish task with task's API, task_manager will also be cleanup.
  7. [OPTIMIZE] Fix some warning when compiling with gcc 9+ and clang 8+.
  8. [OPTIMIZE] Use pthread for TLS when both c++11 thead_local and pthread are available. It will reduce the minimal stack size.
  9. [OPTIMIZE] Fix and add some example codes and documents.

2018-12-07

  1. [OPTIMIZE] add adaptor for vcpkg
  2. [OPTIMIZE] using GNUInstallDirs for all directories
  3. [BOOST] merge boost.context 1.67.0
  4. [OPTIMIZE] add libcopp-config.cmake and libcopp-config-version.cmake for cmake module
  5. [OPTIMIZE] add then and await_task API for easier usage
  6. [OPTIMIZE] add /Zc:__cplusplus for MSVC to make __cplusplus to the standard value.
  7. [OPTIMIZE] fix a guess to x86_64 environment
  8. [OPTIMIZE] add more API for statistics
  9. [FIX] fix the problem that calling compare_exchange_weak failed will lead the cotask to exit
  10. [OPTIMIZE] merge the latest unit test framework, now we will support more readable output when test failed.
  11. [CI] We use xenial to build in linux now.

2018-01-01

  1. [BOOST] merge boost.context 1.66.0
  2. [OPTIMIZE] add support for Intel Transactional Synchronisation Extensions (TSX)
  3. [OPTIMIZE] fix a warning reported by clang-analyzer.
  4. [CI] update README.md and automatic documents.(published at https://libcopp.atframe.work)
  5. [FIX] make sure all the allocated stacks are always greater than the configure value after reloaded when using stack pool.
  6. [FIX] allow segmented stacks when using clang and llvm.
  7. [OPTIMIZE] using the new script to run clang-analyzer.
  8. [OPTIMIZE] optimize the doxygen output and fix some markdown synax not supported by doxygen.

2017-10-01

  1. [OPTIMIZE] optimize cmake files for all target
  2. [OPTIMIZE] update samples and readme(fix sample for stack pool in README.md)
  3. [CI] add gcc 7
  4. [OPTIMIZE] using -std=c++17 for gcc/clang and /std:c++17 for MSVC 15(2015) and upper

2017-06-11

  1. [OPTIMIZE] V2 framework and APIs completed, all reports in clang-analysis and cppcheck are fixed.
  2. [CI] benchmark and samples enabled in v2 branch
  3. [CI] add sample code in README.md into CI

2017-05-10

  1. [BOOST] merge boost.context 1.64.0
  2. [OPTIMIZE] add stack pool manager and unit test
  3. [OPTIMIZE] reduce memory fragment when allocate coroutine task and task action
  4. [CI] benchmark and sample will always be run in Travis CI and Appveyor CI

2016-06-16

  1. [BOOST] merge boost.context 1.61.0 and use the new jump progress(see https://owent.net/2016/1270.html for detail)
  2. [BOOST] enable valgrind support if valgrind/valgrind.h exists
  3. [CXX] use cmake to detect the function of compiler
  4. [OPTIMIZE] using pthread key when c++11 TLS not available
  5. [OPTIMIZE] remove coroutine_context_safe_base.coroutine_context_base is also thread safe now
  6. [OPTIMIZE] remove all global variables of cotask
  7. [OPTIMIZE] remove std/thread.h, add noexpect if available
  8. [CI] CI use build matrix to test more compiler
  9. [BUILD] use RelWithDebInfo for default

2016-02-27

  1. v0.2.0, this version is used in our server for about one year.

2015-12-29

  1. add support for valgrind
  2. add ci configure
  3. merge boost.context 1.60.0
  4. add -fPIC, fix spin lock
  5. some environment do not support TLS, make these environment can compile success

2014-07-25

v0.1.0