From: eregontp@... Date: 2021-07-08T10:39:42+00:00 Subject: [ruby-core:104542] [Ruby master Feature#18020] Introduce `IO::Buffer` for fiber scheduler. Issue #18020 has been updated by Eregon (Benoit Daloze). Does it need to be core, or could it be behind a `require` like `require 'io/buffer'`? The reason I'm asking is the C code could be reused if it's an extension (behind a require) in TruffleRuby, but not if it is core (to avoid loading C extensions during VM startup). The IO::Buffer API looks very similar to FFI::Pointer, to the point it feels redundant with it. Maybe a FFI::Pointer subclass could be used if some extra methods/state is needed. Turned another way: what would be possible with IO::Buffer that is not possible with FFI::Pointer? It might be more valuable to make `ffi` a default or bundled gem, which also brings much more capabilities. `ffi` is already a bundled gem for both JRuby and TruffleRuby. ---------------------------------------- Feature #18020: Introduce `IO::Buffer` for fiber scheduler. https://bugs.ruby-lang.org/issues/18020#change-92820 * Author: ioquatix (Samuel Williams) * Status: Open * Priority: Normal ---------------------------------------- After continuing to build out the fiber scheduler interface and the specific hooks required for `io_uring`, I found some trouble within the implementation of `IO`. I found that in some cases, we need to read into the `rb_io_buffer_t` struct directly. I tried creating a "fake string" in order to transit back into the Ruby fiber scheduler interface and this did work, but I was told we cannot expose fake string to Ruby code. So, after this, and many other frustrations with using `String` as a IO buffer, I decided to implement a low level `IO::Buffer` based on my needs for high performance IO, and as part of the fiber scheduler interface. Going forward, this can form the basis of newer interfaces like `IO::Buffer#splice` and so on. We can also add support for `IO#read(n, buffer)` rather than string. This avoids many encoding and alignment issues. While I'm less interested in the user facing interface at this time, I believe we can introduce it incrementally. Initially my focus is on the interface requirements for the fiber scheduler. Then, I'll look at how we can integrate it more into `IO` directly. The goal is to have this in place for Ruby 3.1. -- https://bugs.ruby-lang.org/ Unsubscribe: