Feature #22274
openMake `IO::Buffer` no longer experimental.
Description
IO::Buffer was introduced in Ruby 3.1 by Feature #18020 as an experimental API. It provides an efficient buffer abstraction for fiber scheduler I/O, zero-copy operations, binary protocol implementations, and access from native extensions.
Since then, the API has seen several Ruby releases of real-world use and substantial development. Ruby 4.1 now has cohesive semantics for buffer ownership and lifecycle, slicing, locking, string and file mappings, MemoryView integration, and single-transfer I/O operations.
I propose making both the Ruby and public C interfaces of IO::Buffer non-experimental in Ruby 4.1.
This would involve:
- Removing the allocation-time experimental warning.
- Removing the experimental status from the class documentation.
- Removing
RB_IO_BUFFER_EXPERIMENTALfrom the public C header. - Removing warning suppression that is only required because
IO::Bufferis experimental. - Updating NEWS to describe
IO::Bufferas stable.
RUBY_IO_BUFFER_VERSION would remain available for compile-time feature detection as the interface continues to evolve.
Before stabilizing the interface, I would particularly appreciate feedback from JRuby and TruffleRuby maintainers.
Related work:
- Original proposal: https://bugs.ruby-lang.org/issues/18020
- CRuby implementation PR: https://github.com/ruby/ruby/pull/18486
- TruffleRuby implementation: https://github.com/truffleruby/truffleruby/pull/4248
- JRuby implementation: https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyIOBuffer.java
- JRuby file-mapping issue: https://github.com/jruby/jruby/issues/8714
No data to display