@mattesilver Rust can convert between sync and async within functions (tokio complains if you carelessly layer sync and async too much, but that is tokio's choice, and not a dead-end either). Languages with threads generally don't have this problem, because they can always spawn a thread for running blocking code, or block a thread waiting on a signal from async code. JS is unique in insisting on a single event loop.