Re: Capy: Request for endorsements

Amlal El Mahrouss via Boost <[email protected]>
Newsgroups gmane.comp.lib.boost.devel
Message-ID <[email protected]>
Hello,

After digging deeper in corosio's code base from the following link:
https://github.com/cppalliance/corosio/blob/0cb2c0096ca2cf8f7c1f1617cb04c19120dd4f12/include/boost/corosio/tcp_server.hpp#L500
You were spot-on with my suggestions, keeping the Executor concept as is would indeed be beneficial per P4007 [2] (Sender and Co-routines, https://wg21.link/p4007)

Thanks,
Amlal.

On 2/20/26 15:11, Vinnie Falco via Boost wrote:
> On Fri, Feb 20, 2026 at 4:32 AM Amlal El Mahrouss via Boost <
> [email protected]> wrote:
>
>> I also have a question about the following snippet at:
>> https://github.com/cppalliance/capy/blob/develop/example/asio/use_capy_example.cpp#L118C70-L119C1
>>
>> We can see at line 119:
>>
>> ```cpp
>> capy::run_async(ctx.get_executor())(run_example(client, server));
>> ```
>>
>> It's elegant, but maybe we could also benefit from this syntax as well:
>>
>> ```cpp
>> auto& exec{ctx.get_executor()};
>> exec.run_async(run_example(client, server));
>> ```
>>
> So, if I understand you correctly then you are asking for the Executor
> concept to have additional members:
>
>      unspecified run_async( IoRunnable auto&& );
>
> This is problematic for a few reasons explained P4003[1]
>
> 1.  An Executor is a low-level primitive. It only specifies how a coroutine
> is resumed. A launch function is something different: a high level
> construct responsible for creating the environment in which a coroutine
> runs, and specifying behavior when the coroutine performs its final
> suspend. run_async falls in the latter category.
>
> 2. The one-call syntax you propose suffers from the allocator timing
> problem described in P4007 Senders and Coroutines [2]. The coroutine frame
> would be created before the allocator has the chance to propagate.
>
> 3. `run_async` is just one example of a launch function: a function which
> begins a new coroutine chain of execution either from a regular function
> (such as main) or a coroutine. The set of launch functions is open, as
> users can (and will) define their own. Here is one such example:
>
> https://github.com/cppalliance/corosio/blob/0cb2c0096ca2cf8f7c1f1617cb04c19120dd4f12/include/boost/corosio/tcp_server.hpp#L500
>
> It makes sense to keep the Executor concept as a low-level narrow
> abstraction, and partition the launch functions into a higher level
> algorithmic set.
>
> Thanks
>
> [1] https://wg21.link/p4003 IoAwaitables: A Coroutines-Only Framework
>
> [2] https://wg21.link/p4007 Senders and Coroutines
>
> P.S. I suppose its pointless asking for the copyright discussion to be
> moved to a separate thread :)
> _______________________________________________
> Boost mailing list -- [email protected]
> To unsubscribe send an email to [email protected]
> https://lists.boost.org/mailman3/lists/boost.lists.boost.org/
> Archived at: https://lists.boost.org/archives/list/[email protected]/message/XP6QFNJJHR4WWIDTUF5P6M2LJVOEQQEG/
_______________________________________________
Boost mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://lists.boost.org/mailman3/lists/boost.lists.boost.org/
Archived at: https://lists.boost.org/archives/list/[email protected]/message/F5UCOFZMSQEWN6VBQUIJM6U2NLM7NITK/
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.