- More benchmarks (TooManyCooks).
- Benchmarks graphs in readme Issue #14.
- Boost atomic dependency.
- Fixed checks in benchmarks (UTS was reported as failing but the results were correct).
- Moved vcpkg submodule to https PR #12
- Compiles under
-fno-exceptions
and-fno-rtti
flags.
- Relaxed
just
fromasync_invocable
tocallable
.
This version of libfork introduces futures as a way to generalize sync_wait
and makes many small implementation changes to enhance safety.
- New static asserts for better error messages when passing or capturing the first argument incorrectly.
- New exception types.
schedule
now generalizessync_wait
.- The
future
class template. - The
detach
function as an alternative tosync_wait
. - More exception handling tests.
- New optional (macro based) mechanism for forward declaring async-functions to speed up compilation.
- Made
task
a RAII type. - Exposed the
referenceable
concept. - Exposed the
storable
concept. - Quasi-pointer and async function object concepts generalized to reference types to reduce the number of moves.
unit_pool
now uses a separate thread for running tasks instead of running them inline.sync_wait
now throws an exception if called from a worker thread.sync_wait
is now exception safe.
- Outdated tests.
- The
algorithm.hpp
meta-header (this was encouraging users to include all the algorithms).
- Fixed
#pragma unroll
on GCC. - Made
lazy_pool
andbusy_pool
movable.
- Fixed-up some extended warnings.
This version of libfork expands the algorithm suite and introduces the generalized lf::dispatch
call for niche exception handling.
- A new
lf::dispatch
higher order function object for fine grained exception control. - A new call
lf::just
to simplifyco_await lf::call[...](...); co_await lf::join;
. - A set of constrained algorithms
for_each
,fold
,scan
, etc. eventually
supports capturing exceptions via thestash_exception
customization point.- Generalized the explicit scheduling mechanism.
- A few new benchmarks for the new constrained algorithms.
- Improved memory safety of awaitables and made many type immovable to reduce erroneous use.
- Improved the API for stack allocation.
- The underlying types of
submit_handle
andtask_handle
. - Re-introduced exception handling and added a customization point for individual exception handling.
- Fixed a few bugs that could occur if an exception was thrown during a
co_await
expression.
- Package tests for conan/vcpkg/manual installs and some package bugfixes.
This release is a full overhaul of the API and implementation of libfork that should bring large performance improvements.
- NUMA support for all schedulers (using
hwloc
for topology discovery). - A segmented-stack backed cactus-stack to manage all coroutine allocations.
- A new
lf::lazy_pool
scheduler. - A new concepts-centric design including concepts for invocability.
- A new API for explicit scheduling.
- The
lf::eventually
class template. - New benchmarks.
- Exposed the
lf::defer
class template for handling cleanup.
- A new API for defining tasks.
- A new API for forking/calling/joining tasks.
- A new API for defining schedulers.
- Old benchmarks that are no longer relevant.
- Allocator support -
- Split CI into jobs for each major platform.
- Use vcpkg for package management.
No releases were made for libfork during the initial stages of the 3.x.x series as the API was in a state of flux.
- Conan support
- CMake install interface now uses correct include path
- CMake config module exports its dependencies correctly
This release primarily backports jthread
to thread
for Apple clang and libc++.
- Support for libc++ and Apple clang.
- Conditional
<syncstream>
support.
- CI builds on Apple Silicon.
This release overhauled libfork bringing many changes including:
- The
busy_pool
scheduler. - Custom schedulers supported.
- Tasks support allocators.
- Benchmarks!!
- Many more tests.
- Decoupling scheduling from task graph creation.
- Void tasks no longer require a future.
- Exception handling (tasks now call
terminate()
if they exit with an unhandled exception). - The global
forkpool
thread pool. This functionality will be reintroduced in a future release but in the form of a customizable scheduler.
- New dependencies for tests/benchmarks and a new CMake project structure.
The original version of libfork (then forkpool), it used a global thread pool for all task scheduling.