From: "shan (Shannon Skipper)" Date: 2022-07-05T17:05:26+00:00 Subject: [ruby-core:109143] [Ruby master Feature#18004] Add Async to the stdlib Issue #18004 has been updated by shan (Shannon Skipper). larskanis (Lars Kanis) wrote in #note-4: > Adding the core Async gem to stdlib requires to add 4 more dependent gems. Async is a big library with a lot of supplemental gems. It makes things more complicated if some gems are in stdlib and some are not. Also Async is made to be usable on rubies before 3.0, whereas ruby-3.x has `Fiber.schedule` as a builtin mechanism for starting async tasks. > > The problem is, that `Fiber.schedule` is not usable without adding a complete scheduler. This makes `Fiber.schedule` a no-go in smaller scripts. So IMHO the thing that is missing in ruby-3.x is a simple scheduler. Otherwise the scheduler feature is rather incomplete. > > My proposal is to promote [test/fiber/scheduler.rb](https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb) to the stdlib (probably as a gem). With around 250 lines it is small enough to be considered a simple reference scheduler, but is too big to be copied into each and every script. Would you consider such a pull request? > > Background: I'm going to make ruby-pg fully compatible to Fiber.scheduler [here](https://github.com/ged/ruby-pg/pull/397). For testing a simple scheduler is required, so I copied [test/fiber/scheduler.rb](https://github.com/ruby/ruby/blob/master/test/fiber/scheduler.rb), but it doesn't receive fixes like [this](https://github.com/ruby/ruby/pull/4777) when copied. That's a great point about multiple gem dependencies. I think my request was overly broad and you're right that a tiny but maintained scheduler backed by io-wait would be great to have by default rather than the whole Async gem along with it's dependencies. It looks like https://github.com/bruno-/fiber_scheduler would be a good option, though it could be paired down by removing scheduler.rb since io-wait is guaranteed to be available. ---------------------------------------- Feature #18004: Add Async to the stdlib https://bugs.ruby-lang.org/issues/18004#change-98283 * Author: shan (Shannon Skipper) * Status: Open * Priority: Normal ---------------------------------------- Adding Async to the stdlib would signal a clear concurrency story for Ruby 3 to compliment Ractor-based parallelism. I don't know how ioquatix feels about adding Async to stdlib, but I wanted to propose it since we keep getting questions about concurrent I/O with Ruby 3 in the community. Ractors get a fair amount of attention on the #ruby IRC channels and Ruby Discord. When Ractors are discussed, question around concurrent I/O in Ruby 3 often follow. Folk don't seem to be aware of Async, so we often cite the Ruby 3 release notes Async Net::HTTP example shown below. ``` ruby require 'async' require 'net/http' require 'uri' Async do ["ruby", "rails", "async"].each do |topic| Async do Net::HTTP.get(URI "https://www.google.com/search?q=#{topic}") end end end ``` The main downside I see for this proposal is the bloat from Async's several gem dependencies. For what it's worth, nio4r has been a staple for a long time and is also the only dependency of Puma. ``` Async is a composable asynchronous I/O framework for Ruby based on nio4r and timers. ``` Async is just so useful it would be awesome to add to the stdlib. It fills and important gap for concurrent I/O with Ruby 3 and would be exciting to see included in a future release. See https://github.com/socketry/async#readme -- https://bugs.ruby-lang.org/ Unsubscribe: