beman.execution
beman.execution: Building Block For Asynchronous Programs
beman.execution provides the basic vocabulary for asynchronous programming as well as important algorithms implemented in terms of this vocabulary. The key entities of the vocabulary are:
-
schedulerused to control where operations are executed.-
The key operation is
schedule(scheduler) → sender.
-
-
senderused to represent work.-
The key operation is
connect(sender, receiver) → operation-state.
-
-
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.
-
-
-
operation-stateto represent a ready to run work graph .-
The key operation is
start(state).
-
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 on `sender’s results. -
on(scheduler, sender)to executesenderonscheduler. -
transfer(sender, scheduler)to complete with withsender’s results on `scheduler. -
when_all(sender …)to complete when all `sender`s have completed. -
bulk(…)to executed execute work, potentially concurrently.
Implements: std::execution (P2300R10).
Help Welcome!
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.
Preconditions
-
cmake v3.30 or newer
-
ninja v1.13.0 or newer
-
A compiler that supports at least C++23
| 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
Examples
-
<stop_token>example: Compiler Explorer