Re: Capy Review

Peter Dimov via Boost <[email protected]> Sat, 27 Jun 2026 02:34:23 +0300
Newsgroups gmane.comp.lib.boost.devel
Message-ID <[email protected]>
Rainer Deyke wrote:
> Second off, my texture-loading coroutine does three things:
>    - Read an image file.
>    - Decode the image file.
>    - Convert upload the image as a texture to OpenGL.
> 
> None of these operation, taken individually, require a coroutine.
> 
> I'll grant that the first step, the i/o layer, does use coroutines internally, but the
> hard work in done by SDL, wrapped in a custom awaitable.  Wrapping the
> inner awaitable in a coroutine was a choice I made.  I could have chosen to
> wrap the outer functionality in a custom awaitable directly.  A coroutine was
> used, but not required.
> 
> The second step is a CPU-bound synchronous function that needs to run in a
> thread pool.
> 
> The third step is a GPU-upload-speed-bound synchronous function that needs
> to run in the main thread.
> 
> Right now I have one short, readable coroutine that co_awaits one awaitable,
> calls two functions.  Between the two function is a very visible and very explicit
> tmc::resume_on to jump between executors.
> It's four lines if you don't count error handling.  It's already as simple as
> possible, and its trivial to reason about.
> 
> Breaking this up into multiple coroutines makes it neither simpler nor easier to
> reason about.  It just adds additional noise.

That's a separate question, independent of whether coroutines always resume
on their original executor.

You're talking about this:

// on I/O executor

co_await read_image_file();

// still on I/O executor

co_await resume_on( cpu_ex );

// on CPU executor

co_await decode_image_file();

// still on CPU executor

co_await resume_on( main_thread_ex );

// on main thread

co_await upload_image_to_opengl();

// still on main thread

This is perfectly compatible with the Capy requirement that co_await should
not switch executors; the explicit resume_on operation is obviously exempt.

It's a legitimate design, just one that the Capy authors have decided against,
in favor of the explicit (and equally legitimate)

run_on( cpu_ex )( decode_image_file() );


_______________________________________________
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/WRHKXA4SV6H73FIEJ7LYAMXZSN5KTXYT/