Thanks for the kind words.

It is not as simple as synchronous pipes, but it also has far better edge case and error handling.

For example, on Unix, if you press ctrl-Z to pause execution, nextest will send SIGTSTP to test processes and also pause its internal timers (resuming them when you type in fg or bg). That kind of bookkeeping is pretty hard to do with linear code, and especially hard to coordinate across subprocesses.

State machines with message passing (as seen in GUI apps) are very helpful at handling this, but they're quite hard to write by hand.

The async keyword in Rust allows you to write state machines that look somewhat like linear code (though with the big cancellation asterisk).