Hi Jens,

Two options for writing sync-like code that is actually async:
- KJ supports "Fibers", which allocates a separate stack that runs in the
same thread. When running on that stack, you get a `WaitScope` that you can
use to wait on promises. When you wait, the thread switches back to the
main stack.
- We have some support for C++20 coroutines using co_await/co_return (aka
async/await). However, it's currently based on `-fcoroutines-ts` in Clang;
it may not work with any other compiler, and this flag is going to go away
soon, though we'll likely upgrade to the final version of coroutines before
that happens.

-Kenton

On Wed, Aug 31, 2022 at 12:29 PM Jens Alfke <[email protected]> wrote:

>
>
> > On Aug 30, 2022, at 7:37 PM, 'Kenton Varda' via Cap'n Proto <
> [email protected]> wrote:
> >
> > Hi Jens,
> >
> > It sounds very obnoxious that your debugger insists on breaking on this
> signal.
>
> I’ve filed a bug report with Apple.
>
> > With that said, you could try compiling with `-DKJ_USE_PIPE_FOR_WAKEUP`,
> which causes it to avoid using signals for this. You need to compile both
> KJ itself and your own code that depends on it with this define; if they
> don't match you may get undefined behavior.
>
> For posterity: since I’m building with CMake, I accomplished this by
> adding `add_compile_definitions(KJ_USE_PIPE_FOR_WAKEUP)` to my top-level
> CMakeLists.txt, above the line `add_subdirectory(vendor/capnproto)`.
>
> Now my code can talk inter-thread RPC over the fake socket! Yay!
>
> But of course there’s always another roadblock. The next one I hit is a
> fatal exception "expected !loop.running; wait() is not allowed from within
> event callbacks.” Apparently code running in an Executor block on the
> target thread is not allowed to call Promise.wait()? This is a bummer, as
> so far I’ve been lazy and written my RPC client code in blocking style.
> Looks like it’s time to fully async-ify it.
>
> —Jens

-- 
You received this message because you are subscribed to the Google Groups 
"Cap'n Proto" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/capnproto/CAJouXQnMWk2ZROUhaVzr14YnM9yKghdjA1%3Dy7pN94DkkMkWGiQ%40mail.gmail.com.

Reply via email to