From: samuel@... Date: 2021-07-03T07:24:29+00:00 Subject: [ruby-core:104482] [Ruby master Feature#18020] Introduce `IO::Buffer` for fiber scheduler. Issue #18020 has been updated by ioquatix (Samuel Williams). This also relates to https://bugs.ruby-lang.org/issues/13166 ---------------------------------------- Feature #18020: Introduce `IO::Buffer` for fiber scheduler. https://bugs.ruby-lang.org/issues/18020#change-92743 * 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: