Project

General

Profile

Actions

Feature #20105

open

Introduce `IO::Stream` or something similar.

Added by ioquatix (Samuel Williams) 11 months ago. Updated 8 months ago.

Status:
Assigned
Target version:
-
[ruby-core:115981]

Description

Ruby's IO class has a general model for streaming IO, including some hidden classes like IO::generic_readable and IO::generic_writable.

As Ruby's core IO classes evolve, gems like openssl (see OpenSSL::Buffering) need to be updated to support changes to the interface.

As it stands, there are changes in IO which are not copied to OpenSSL::Buffering. I'd like to propose we introduce some shared interface for streams that is used by IO, Socket, and OpenSSL to start with. The general interface would be similar to IO and allow code like OpenSSL to avoid re-implementing the IO interface.

I don't have a strong idea for the interface yet, but it would probably look something like this:

class IO::Stream
  def initialize(io, buffered: true)
  end

  def read(size, buffer=nil)
  end

  def write(size, buffer=nil)
  end
  
  # Include general operations from IO, like gets, puts, etc
end

I think ideally we'd try implement with pure Ruby and a first goal would be to replace OpenSSL::Buffering.

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0