beman.execution provides the basic vocabulary for asynchronous programming as well as important algorithms implemented in terms of this vocabulary.
Implements: std::execution (P2300R10).
The key entities of the vocabulary are:
schedulerused to control where operations are executed.- The key operation is
schedule(scheduler) -> sender.
- The key operation is
senderused to represent work.- The key operation is
connect(sender, receiver) -> operation-state.
- The key operation is
receiverused to receive completion notifications.- There are multiple operations on receivers:
set_value(receiver, args...)for successful completions.set_error(receiver, error)to report errors.set_stopped(receiver)to report cancellation.
- There are multiple operations on receivers:
operation-stateto represent a ready to run work graph .- The key operation is
start(state).
- The key operation is
Using these operations some fundamental algorithms are implemented, e.g.:
just(args...)as the starting point of a work graph without a specified scheduler`.let_value(sender, fun)to produce a sender based onsender's results.on(scheduler, sender)to executesenderonscheduler.transfer(sender, scheduler)to complete with withsender's results onscheduler.when_all(sender ...)to complete when allsenders have completed.bulk(...)to executed execute work, potentially concurrently.
Status: Under development and not yet ready for production use.
There are plenty of things which need to be done. See the
contributions page
for some ideas how to contribute. The resources page
contains some links for general information about the sender/receivers and std::execution.
This project requires at least the following to build:
- A C++ compiler that conforms to the C++23 standard or greater
- CMake 3.30 or later
- (Test Only) GoogleTest
You can disable building tests by setting CMake option BEMAN_EXECUTION_BUILD_TESTS to
OFF when configuring the project.
You can disable building examples by setting CMake option BEMAN_EXECUTION_BUILD_EXAMPLES to
OFF when configuring the project.
| Library | Linux | MacOS | Windows |
|---|---|---|---|
| build |
The following instructions build the library and the examples:
ln -s cmake/CMakeUserPresets.json .
cmake --workflow --list-presets
Available workflow presets:
"debug"
"release"
"gcc-debug"
"gcc-release"
"llvm-debug"
"llvm-release"
"msvc-debug"
"msvc-release"
CXX=g++-15 cmake --workflow --preset release
The implementation compiles and passes tests using clang, gcc, and MSVC++.
| Compiler | Version | C++ Standards | Standard Library |
|---|---|---|---|
| GCC | 15-14 | C++26, C++23 | libstdc++ |
| Clang | 22-19 | C++26, C++23 | libc++ |
| MSVC | latest | C++23 | MSVC STL |
beman.execution is licensed under the Apache License v2.0 with LLVM Exceptions.
<stop_token>example: Compiler Explorer