From: "Eregon (Benoit Daloze) via ruby-core" Date: 2026-09-20T20:26:01+00:00 Subject: [ruby-core:126809] [Ruby Feature#22274] Make `IO::Buffer` no longer experimental. Issue #22274 has been updated by Eregon (Benoit Daloze). ioquatix (Samuel Williams) wrote in #note-6: > Implemented in [https://github.com/ruby/ruby/pull/18911](https://github.com/ruby/ruby/pull/18911) Great, this will make semantics match more closely and ensure reliable behavior. ioquatix (Samuel Williams) wrote in #note-6: > In addition, sharing a buffer between ractors, for example, should not prevent mutation of the underlying bytes (unless they are marked as readonly). It definitely should, otherwise this is shared mutable state, breaking the actor model's guaranteed of isolated state. Regarding the mmap non-read-only case, how about raising an exception when trying to raise the IO::Buffer for that since it can't be guaranteed? IO::Buffer is somewhat similar to a binary String, or an Array of bytes, both of these do prevent mutations after `freeze`. IOW, I believe `IO::Buffer#freeze` should change the buffer to make it read-only, similar to other core classes. I don't think there is any other container class in core which allows mutation of its "elements" after `freeze`. ---------------------------------------- Feature #22274: Make `IO::Buffer` no longer experimental. https://bugs.ruby-lang.org/issues/22274#change-119120 * Author: ioquatix (Samuel Williams) * Status: Open * Assignee: ioquatix (Samuel Williams) ---------------------------------------- `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_EXPERIMENTAL` from the public C header. * Removing warning suppression that is only required because `IO::Buffer` is experimental. * Updating NEWS to describe `IO::Buffer` as 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 -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/