socketry/async

Moving forward with Ruby 3+ only implementation.

Closed this issue · 1 comments

#23 discusses a fundamental shift in Fiber scheduling which is implemented in #111 which may warrant a major version bump, even if Async and its "public" interfaces are largely the same and work almost the same way.

My general thought right now is one of:

  • Async 1.x -> current approach, Async 2.x -> Ruby 3+ only.
  • Async 1.29.x -> current approach, Async 1.30.x -> Ruby 3+ only.

The core Async interface is almost the same, the semantic model is almost the same. I ran external tests and most of my systems work the same on async master and this proposed branch. So, from the outside, it looks largely the same. The main issue would be whether bundler can figure out to us 1.29 on Ruby < 3.0 which sadly I don't think is true.

Therefore, I think it might be pragmatic to release Async 2.x and really polish the interfaces with all the knowledge we gained during 1.x and Ruby 3. I still need to think about it.

After discussing this we have the following outcome.

We are planning to define a stable interface (LTS) for Async 1.x and 2.x which will be compatible between releases for at least 3 years. Async 1.x will be EOL when Ruby 3.0 is EOL. Until then, we will maintain feature parity between them.