owent/libcopp
cross-platform coroutine library in c++
📋 CHANGELOG
- Rewrite document.
- Support cmake 4+.
- Remove invalid CI runners.
- Optimize documents, add channel example, support cmake 4 by @owent in https://github.com/owent/libcopp/pull/58
- Full Changelog: https://github.com/owent/libcopp/compare/v2.3.1...v2.3.2
📋 CHANGELOG
- 1. Fixes storage types in `generator_vtable`.
- 2. Fixes format rule.
- Full Changelog: https://github.com/owent/libcopp/compare/v2.3.0...v2.3.1
📋 CHANGELOG
- 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.
- + 2 more
📋 CHANGELOG
- 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.
📋 CHANGELOG
- 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.
📋 CHANGELOG
- + Update cmake-toolset
- + Implement `unhandled_exception` when without exception.
📋 CHANGELOG
- + 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
📋 CHANGELOG
- 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
- + [x] Add `value_type` to task_macro ( `macro_coroutine` )
- 3. \[Previous\] Redesign C++ 20 coroutine support.
- 4. Using ctest to maintain test and samples
- 5. Fix compatibility for C++20 attributes and macros
- 6. \[BREAK CHANGES\] Rename `LIBCOPP_DISABLE_THIS_MT` to `LIBCOPP_LOCK_DISABLE_THIS_MT`
📋 CHANGELOG
- 1. Allow to download submodule by external tool and do not depend `git`.
📋 CHANGELOG
- 1. [OPTIMIZE] Switch build system to to [cmake-toolset][1]
- 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 more
CHANGELOG ------ 1. [FIX] Fix version tag name
CHANGELOG ------------ 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][1] . 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]: https://github.com/atframework/atframe_utils
CHANGELOG ------------ 1. [FIX] [#16](https://github.com/owt5008137/libcopp/issues/16) : document of ```LIBCOPP_DISABLE_ATOMIC_LOCK``` and ```LIBCOPP_DISABLE_THIS_MT``` . 2. [FIX] [#18](https://github.com/owt5008137/libcopp/issues/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.
CHANGELOG ------------ 1. Fix compiler version checker for C++20 coroutine 2. Add cmake interface option and features for targets 3. Update documents
CHANGELOG ------------ 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``` into ```task::await_task```, Some compile don't allow ```await_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. 10. Using sphinx and reStructuredText to rewrite https://libcopp.atframe.work/ #### 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
CHANGELOG ------------ 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.
CHANGELOG ------------ 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 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.
CHANGELOG ============= 1. Support vcpkg 2. Generate libcopp-config.cmake and libcopp-config-version.cmake for cmake
First release with v2. This release is used in our project and works well.
1. guess flag when call cotask::start/resume to reduce atomic operation 2. add reference when call cotask::start to protect cotask from destroy 3. use functor directly if action based on task_action_impl 4. fix missing break after alloc failed in benchmark
1. 优化结构,减少内存碎片 2. merge boost 1.64.0 3. 增加栈池 4. 支持线程安全
1. 上一个内测游戏版本使用的版本 2. merge boost 1.63.0 3. 协程切换时允许透传用户自定义数据 4. 修订所有scan-build的warning报告 5. 修订单元测试里的一些小问题 6. 修正递归循环跳转时的问题,现在协程yield之前执行resume会返回错误码
# UPDATE 1. 更新context到boost 1.61的新模型 2. 修订CI的编译矩阵 3. 现在支持MINGW64了 4. 调整安装内容和动态栈的判定方式 5. 重构跨平台原子操作 6. 使用cmake内置功能判定编译器功能 7. 现在的this_task和this_coroutine支持IOS和Android环境下的线程安全(Android和IOS不支持C++11原生TLS) 8. copp和cotask现在支持透传自定义参数
release tested platform: max os windows linux
