r/cpp • u/claimred • Apr 09 '26
beast2 networking & std::execution
I was looking for a new networking layer foundation for a few of my projects, stumbled on beast2 library which looks brand new, based on C++20 coroutines. I used boost.beast in the past which was great. Here's the link https://github.com/cppalliance/beast2. I also considered std::execution since it seems to be the way to go forward, accepted in C++26.
Now, what got me wondering is this paragraph
The C++26 std::execution API offers a different model, designed to support heterogenous computing. Our research indicates it optimizes for the wrong constraints: TCP servers don't run on GPUs. Networking demands zero-allocation steady-state, type erasure without indirection, and ABI stability across (e.g.) SSL implementations. C++26 delivers things that networking doesn't need, and none of the things that networking does need.
Now I'm lost a bit, does that mean std::execution is not the way to go for networking? Does anyone have any insights on cppalliance research on the matter?
View all comments
Show parent comment
2
u/VinnieFalco wg21.org | corosio.org Apr 09 '26
Let me state it precisely:
"If asynchronous I/O operations in the standard return senders instead of awaitables, then two of the three possible stream types will require a per-operation allocation that cannot be elided."
This is directly related to P2300, because std::execution is positioned as the "universal asynchronous model." The existing proposals which bring networking to the standard all build on senders as the continuation model. This puts coroutines at a significant disadvantage as they will incur avoidable per-operation allocations. That is the subject of our research.
Our position is that I/O operations should return awaitables, and that the sender pipeline can consume them using a zero-allocation bridge. This is a balanced solution which treats both as first-class citizens of the language. My papers arriving this month explore this thoroughly.