Comment by osigurdson

Comment by osigurdson 20 hours ago

9 replies

At least Go didn't take the dark path of having async / await keywords. In C# that is a real nightmare and necessary to use sync over async anti-patterns unless willing to re-write everything. I'm glad Zig took this "colorless" approach.

rowanG077 20 hours ago

Where do you think the Io parameter comes from? If you change some function to do something async and now suddenly you require an Io instance. I don't see the difference between having to modify the call tree to be async vs modifying the call tree to pass in an Io token.

  • messe 19 hours ago

    Synchronous Io also uses the Io instance now. The coloring is no longer "is it async?" it's "does it perform Io"?

    This allows library authors to write their code in a manner that's agnostic to the Io runtime the user chooses, synchronous, threaded, evented with stackful coroutines, evented with stackless coroutines.

    • simonask 12 hours ago

      The interesting question was always “does it perform IO”.

    • metaltyphoon 13 hours ago

      Except that now your library code lost context on how it runs. If you meant it to be sync and the caller gives you an multi threaded IO your code can fail in unexpected ways.

      • messe 10 hours ago

        How so? Aside from regular old thread safety issues that is.

    • rowanG077 19 hours ago

      Rust also allows writing async code that is agnostic to the async runtime used. Subsuming async under Io doesn't change much imo.