123456789_123456789_123456789_123456789_123456789_

NEWS for Ruby 4.1.0

This document is a list of user-visible feature changes since the 4.0.0 release, except for bug fixes.

Note that each entry is kept to a minimum, see links for details.

Language changes

Core classes updates

Note: We're only listing outstanding class updates.

Stdlib updates

The following bundled gems are added.

We only list stdlib changes that are notable feature changes.

Other changes are listed in the following sections. We also listed release history from the previous bundled version that is Ruby 3.4.0 if it has GitHub releases.

The following bundled gems are promoted from default gems.

The following bundled gems are removed.

They are still available on rubygems.org and can be installed with gem install. [[Feature #21835]]

The following default gem is added.

The following default gems are updated.

The following bundled gems are updated.

RubyGems and Bundler

Ruby 4.0 bundled RubyGems and Bundler version 4. see the following links for details.

Supported platforms

Compatibility issues

Stdlib compatibility issues

C API updates

Embedded TypedData

Ractor-scoped GC address registration

Type for lengths and indices

Atomic operations

Removed APIs

The following APIs, which have been deprecated for many years, are removed. [[Feature #21768]]

Implementation improvements

Ractor

A lot of work has gone into making Ractors more stable, performant, and usable. These improvements bring Ractor implementation closer to leaving experimental status.

M:N thread scheduler

JIT

ZJIT

YJIT

[Bug #18661]: https://bugs.ruby-lang.org/issues/18661 [Bug #18947]: https://bugs.ruby-lang.org/issues/18947 [Bug #22273]: https://bugs.ruby-lang.org/issues/22273 [Bug #22276]: https://bugs.ruby-lang.org/issues/22276 [Bug #22379]: https://bugs.ruby-lang.org/issues/22379 [Feature #8948]: https://bugs.ruby-lang.org/issues/8948 [Feature #9779]: https://bugs.ruby-lang.org/issues/9779 [Feature #15330]: https://bugs.ruby-lang.org/issues/15330 [Feature #17548]: https://bugs.ruby-lang.org/issues/17548 [Feature #18439]: https://bugs.ruby-lang.org/issues/18439 [Feature #20163]: https://bugs.ruby-lang.org/issues/20163 [Feature #21390]: https://bugs.ruby-lang.org/issues/21390 [Feature #21768]: https://bugs.ruby-lang.org/issues/21768 [Feature #21781]: https://bugs.ruby-lang.org/issues/21781 [Feature #21785]: https://bugs.ruby-lang.org/issues/21785 [Feature #21796]: https://bugs.ruby-lang.org/issues/21796 [Feature #21835]: https://bugs.ruby-lang.org/issues/21835 [Feature #21853]: https://bugs.ruby-lang.org/issues/21853 [Feature #21861]: https://bugs.ruby-lang.org/issues/21861 [Feature #21932]: https://bugs.ruby-lang.org/issues/21932 [Feature #21951]: https://bugs.ruby-lang.org/issues/21951 [Feature #21981]: https://bugs.ruby-lang.org/issues/21981 [Feature #22097]: https://bugs.ruby-lang.org/issues/22097 [Feature #22118]: https://bugs.ruby-lang.org/issues/22118 [Feature #22135]: https://bugs.ruby-lang.org/issues/22135 [Feature #22137]: https://bugs.ruby-lang.org/issues/22137 [Feature #22139]: https://bugs.ruby-lang.org/issues/22139 [Feature #22175]: https://bugs.ruby-lang.org/issues/22175 [Feature #22185]: https://bugs.ruby-lang.org/issues/22185 [Feature #22205]: https://bugs.ruby-lang.org/issues/22205 [Feature #22226]: https://bugs.ruby-lang.org/issues/22226 [Feature #22232]: https://bugs.ruby-lang.org/issues/22232 [Feature #22236]: https://bugs.ruby-lang.org/issues/22236 [Feature #22238]: https://bugs.ruby-lang.org/issues/22238 [Feature #22255]: https://bugs.ruby-lang.org/issues/22255 [Feature #22297]: https://bugs.ruby-lang.org/issues/22297 [Feature #22309]: https://bugs.ruby-lang.org/issues/22309 [Feature #22400]: https://bugs.ruby-lang.org/issues/22400 [Feature #22441]: https://bugs.ruby-lang.org/issues/22441 [PR #17201]: https://github.com/ruby/ruby/pull/17201 [GH-psych #805]: https://github.com/ruby/psych/pull/805 [prism-v1.8.0]: https://github.com/ruby/prism/releases/tag/v1.8.0 [prism-v1.8.1]: https://github.com/ruby/prism/releases/tag/v1.8.1 [prism-v1.9.0]: https://github.com/ruby/prism/releases/tag/v1.9.0 [RubyGems-v4.0.4]: https://github.com/rubygems/rubygems/releases/tag/v4.0.4 [RubyGems-v4.0.5]: https://github.com/rubygems/rubygems/releases/tag/v4.0.5 [RubyGems-v4.0.6]: https://github.com/rubygems/rubygems/releases/tag/v4.0.6 [RubyGems-v4.0.7]: https://github.com/rubygems/rubygems/releases/tag/v4.0.7 [RubyGems-v4.0.8]: https://github.com/rubygems/rubygems/releases/tag/v4.0.8 [RubyGems-v4.0.9]: https://github.com/rubygems/rubygems/releases/tag/v4.0.9 [RubyGems-v4.0.10]: https://github.com/rubygems/rubygems/releases/tag/v4.0.10 [RubyGems-v4.0.11]: https://github.com/rubygems/rubygems/releases/tag/v4.0.11 [RubyGems-v4.0.12]: https://github.com/rubygems/rubygems/releases/tag/v4.0.12 [RubyGems-v4.0.13]: https://github.com/rubygems/rubygems/releases/tag/v4.0.13 [RubyGems-v4.0.14]: https://github.com/rubygems/rubygems/releases/tag/v4.0.14 [RubyGems-v4.0.15]: https://github.com/rubygems/rubygems/releases/tag/v4.0.15 [RubyGems-v4.0.16]: https://github.com/rubygems/rubygems/releases/tag/v4.0.16 [RubyGems-v4.0.17]: https://github.com/rubygems/rubygems/releases/tag/v4.0.17 [RubyGems-v4.0.18]: https://github.com/rubygems/rubygems/releases/tag/v4.0.18 [RubyGems-v4.0.19]: https://github.com/rubygems/rubygems/releases/tag/v4.0.19 [RubyGems-v4.0.20]: https://github.com/rubygems/rubygems/releases/tag/v4.0.20 [RubyGems-v4.0.21]: https://github.com/rubygems/rubygems/releases/tag/v4.0.21 [RubyGems-v4.0.22]: https://github.com/rubygems/rubygems/releases/tag/v4.0.22 [RubyGems-v4.0.23]: https://github.com/rubygems/rubygems/releases/tag/v4.0.23 [RubyGems-v4.1.0.beta1]: https://github.com/rubygems/rubygems/releases/tag/v4.1.0.beta1 [RubyGems-v4.1.0.beta2]: https://github.com/rubygems/rubygems/releases/tag/v4.1.0.beta2 [bundler-v4.0.4]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.4 [bundler-v4.0.5]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.5 [bundler-v4.0.6]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.6 [bundler-v4.0.7]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.7 [bundler-v4.0.8]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.8 [bundler-v4.0.9]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.9 [bundler-v4.0.10]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.10 [bundler-v4.0.11]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.11 [bundler-v4.0.12]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.12 [bundler-v4.0.13]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.13 [bundler-v4.0.14]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.14 [bundler-v4.0.15]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.15 [bundler-v4.0.16]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.16 [bundler-v4.0.17]: https://github.com/rubygems/rubygems/releases/tag/bundler-v4.0.17 [date-v3.6.0]: https://github.com/ruby/date/releases/tag/v3.6.0 [delegate-v0.7.0]: https://github.com/ruby/delegate/releases/tag/v0.7.0 [digest-v3.3.0]: https://github.com/ruby/digest/releases/tag/v3.3.0 [erb-v6.0.1.1]: https://github.com/ruby/erb/releases/tag/v6.0.1.1 [erb-v6.0.2]: https://github.com/ruby/erb/releases/tag/v6.0.2 [erb-v6.0.3]: https://github.com/ruby/erb/releases/tag/v6.0.3 [erb-v6.0.4]: https://github.com/ruby/erb/releases/tag/v6.0.4 [erb-v6.0.5]: https://github.com/ruby/erb/releases/tag/v6.0.5 [erb-v6.0.6]: https://github.com/ruby/erb/releases/tag/v6.0.6 [erb-v6.0.7]: https://github.com/ruby/erb/releases/tag/v6.0.7 [etc-v1.5.0]: https://github.com/ruby/etc/releases/tag/v1.5.0 [fileutils-v1.8.1]: https://github.com/ruby/fileutils/releases/tag/v1.8.1 [io-console-v0.9.0]: https://github.com/ruby/io-console/releases/tag/v0.9.0 [io-console-v0.9.1]: https://github.com/ruby/io-console/releases/tag/v0.9.1 [io-console-v0.9.2]: https://github.com/ruby/io-console/releases/tag/v0.9.2 [io-console-v0.9.3]: https://github.com/ruby/io-console/releases/tag/v0.9.3 [io-console-v0.9.4]: https://github.com/ruby/io-console/releases/tag/v0.9.4 [ipaddr-v1.2.9]: https://github.com/ruby/ipaddr/releases/tag/v1.2.9 [ipaddr-v1.3.0]: https://github.com/ruby/ipaddr/releases/tag/v1.3.0 [json-v2.18.1]: https://github.com/ruby/json/releases/tag/v2.18.1 [json-v2.19.0]: https://github.com/ruby/json/releases/tag/v2.19.0 [json-v2.19.1]: https://github.com/ruby/json/releases/tag/v2.19.1 [json-v2.19.2]: https://github.com/ruby/json/releases/tag/v2.19.2 [json-v2.19.3]: https://github.com/ruby/json/releases/tag/v2.19.3 [json-v2.19.4]: https://github.com/ruby/json/releases/tag/v2.19.4 [json-v2.19.5]: https://github.com/ruby/json/releases/tag/v2.19.5 [json-v2.19.6]: https://github.com/ruby/json/releases/tag/v2.19.6 [json-v2.19.7]: https://github.com/ruby/json/releases/tag/v2.19.7 [json-v2.19.8]: https://github.com/ruby/json/releases/tag/v2.19.8 [json-v2.19.9]: https://github.com/ruby/json/releases/tag/v2.19.9 [json-v2.20.0]: https://github.com/ruby/json/releases/tag/v2.20.0 [json-v2.21.0]: https://github.com/ruby/json/releases/tag/v2.21.0 [json-v2.21.2]: https://github.com/ruby/json/releases/tag/v2.21.2 [json-v3.0.0.rc1]: https://github.com/ruby/json/releases/tag/v3.0.0.rc1 [json-v3.0.0]: https://github.com/ruby/json/releases/tag/v3.0.0 [net-http-v0.10.0]: https://github.com/ruby/net-http/releases/tag/v0.10.0 [net-protocol-v0.3.0]: https://github.com/ruby/net-protocol/releases/tag/v0.3.0 [net-protocol-v0.4.0]: https://github.com/ruby/net-protocol/releases/tag/v0.4.0 [open3-v0.3.0]: https://github.com/ruby/open3/releases/tag/v0.3.0 [openssl-v4.0.1]: https://github.com/ruby/openssl/releases/tag/v4.0.1 [openssl-v4.0.2]: https://github.com/ruby/openssl/releases/tag/v4.0.2 [pp-v0.6.4]: https://github.com/ruby/pp/releases/tag/v0.6.4 [prettyprint-v0.2.1]: https://github.com/ruby/prettyprint/releases/tag/v0.2.1 [psych-v5.4.0]: https://github.com/ruby/psych/releases/tag/v5.4.0 [psych-v5.5.0]: https://github.com/ruby/psych/releases/tag/v5.5.0 [resolv-v0.7.1]: https://github.com/ruby/resolv/releases/tag/v0.7.1 [resolv-v0.7.2]: https://github.com/ruby/resolv/releases/tag/v0.7.2 [resolv-v0.8.0]: https://github.com/ruby/resolv/releases/tag/v0.8.0 [resolv-v0.8.1]: https://github.com/ruby/resolv/releases/tag/v0.8.1 [strscan-v3.1.7]: https://github.com/ruby/strscan/releases/tag/v3.1.7 [strscan-v3.1.8]: https://github.com/ruby/strscan/releases/tag/v3.1.8 [tempfile-v0.3.2]: https://github.com/ruby/tempfile/releases/tag/v0.3.2 [time-v0.5.0]: https://github.com/ruby/time/releases/tag/v0.5.0 [timeout-v0.6.1]: https://github.com/ruby/timeout/releases/tag/v0.6.1 [tmpdir-v0.3.2]: https://github.com/ruby/tmpdir/releases/tag/v0.3.2 [uri-v1.1.2]: https://github.com/ruby/uri/releases/tag/v1.1.2 [zlib-v3.2.3]: https://github.com/ruby/zlib/releases/tag/v3.2.3 [zlib-v3.2.4]: https://github.com/ruby/zlib/releases/tag/v3.2.4 [power_assert-v3.1.0]: https://github.com/ruby/power_assert/releases/tag/v3.1.0 [rake-v13.4.0]: https://github.com/ruby/rake/releases/tag/v13.4.0 [rake-v13.4.1]: https://github.com/ruby/rake/releases/tag/v13.4.1 [rake-v13.4.2]: https://github.com/ruby/rake/releases/tag/v13.4.2 [test-unit-3.7.6]: https://github.com/test-unit/test-unit/releases/tag/3.7.6 [test-unit-3.7.7]: https://github.com/test-unit/test-unit/releases/tag/3.7.7 [test-unit-3.7.8]: https://github.com/test-unit/test-unit/releases/tag/3.7.8 [rss-0.3.3]: https://github.com/ruby/rss/releases/tag/0.3.3 [net-imap-v0.6.3]: https://github.com/ruby/net-imap/releases/tag/v0.6.3 [net-imap-v0.6.4]: https://github.com/ruby/net-imap/releases/tag/v0.6.4 [net-imap-v0.6.4.1]: https://github.com/ruby/net-imap/releases/tag/v0.6.4.1 [net-imap-v0.6.5]: https://github.com/ruby/net-imap/releases/tag/v0.6.5 [net-imap-v0.6.6]: https://github.com/ruby/net-imap/releases/tag/v0.6.6 [net-imap-v0.6.7]: https://github.com/ruby/net-imap/releases/tag/v0.6.7 [net-imap-v0.6.8]: https://github.com/ruby/net-imap/releases/tag/v0.6.8 [net-smtp-v0.5.2]: https://github.com/ruby/net-smtp/releases/tag/v0.5.2 [rbs-v3.10.1]: https://github.com/ruby/rbs/releases/tag/v3.10.1 [rbs-v3.10.2]: https://github.com/ruby/rbs/releases/tag/v3.10.2 [rbs-v3.10.3]: https://github.com/ruby/rbs/releases/tag/v3.10.3 [rbs-v3.10.4]: https://github.com/ruby/rbs/releases/tag/v3.10.4 [rbs-v4.0.0.dev.1]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.1 [rbs-v4.0.0.dev.2]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.2 [rbs-v4.0.0.dev.3]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.3 [rbs-v4.0.0.dev.4]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.4 [rbs-v4.0.0.dev.5]: https://github.com/ruby/rbs/releases/tag/v4.0.0.dev.5 [rbs-v4.0.0]: https://github.com/ruby/rbs/releases/tag/v4.0.0 [rbs-v4.0.1.dev.1]: https://github.com/ruby/rbs/releases/tag/v4.0.1.dev.1 [rbs-v4.0.1.dev.2]: https://github.com/ruby/rbs/releases/tag/v4.0.1.dev.2 [rbs-v4.0.1]: https://github.com/ruby/rbs/releases/tag/v4.0.1 [rbs-v4.0.2]: https://github.com/ruby/rbs/releases/tag/v4.0.2 [rbs-v4.0.3]: https://github.com/ruby/rbs/releases/tag/v4.0.3 [rbs-v4.1.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v4.1.0.pre.1 [rbs-v4.1.0.pre.2]: https://github.com/ruby/rbs/releases/tag/v4.1.0.pre.2 [rbs-v4.1.0]: https://github.com/ruby/rbs/releases/tag/v4.1.0 [rbs-v4.1.1.pre.1]: https://github.com/ruby/rbs/releases/tag/v4.1.1.pre.1 [rbs-v4.1.1]: https://github.com/ruby/rbs/releases/tag/v4.1.1 [rbs-v4.1.2]: https://github.com/ruby/rbs/releases/tag/v4.1.2 [rbs-v4.1.3]: https://github.com/ruby/rbs/releases/tag/v4.1.3 [rbs-v4.2.0.pre.1]: https://github.com/ruby/rbs/releases/tag/v4.2.0.pre.1 [rbs-v4.2.0]: https://github.com/ruby/rbs/releases/tag/v4.2.0 [bigdecimal-v4.1.0]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.0 [bigdecimal-v4.1.1]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.1 [bigdecimal-v4.1.2]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.2 [bigdecimal-v4.1.3]: https://github.com/ruby/bigdecimal/releases/tag/v4.1.3 [resolv-replace-v0.2.0]: https://github.com/ruby/resolv-replace/releases/tag/v0.2.0 [nkf-v0.3.0]: https://github.com/ruby/nkf/releases/tag/v0.3.0 [syslog-v0.4.0]: https://github.com/ruby/syslog/releases/tag/v0.4.0 [csv-v3.3.6]: https://github.com/ruby/csv/releases/tag/v3.3.6 [repl_type_completor-v0.1.13]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.13 [repl_type_completor-v0.1.14]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.14 [repl_type_completor-v0.1.15]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.15 [repl_type_completor-v0.1.16]: https://github.com/ruby/repl_type_completor/releases/tag/v0.1.16 [pstore-v0.2.1]: https://github.com/ruby/pstore/releases/tag/v0.2.1 [rdoc-v7.0.4]: https://github.com/ruby/rdoc/releases/tag/v7.0.4 [rdoc-v7.1.0]: https://github.com/ruby/rdoc/releases/tag/v7.1.0 [rdoc-v7.2.0]: https://github.com/ruby/rdoc/releases/tag/v7.2.0 [rdoc-v8.0.0]: https://github.com/ruby/rdoc/releases/tag/v8.0.0 [rdoc-v8.1.0]: https://github.com/ruby/rdoc/releases/tag/v8.1.0 [win32ole-v1.9.3]: https://github.com/ruby/win32ole/releases/tag/v1.9.3 [irb-v1.17.0]: https://github.com/ruby/irb/releases/tag/v1.17.0 [irb-v1.18.0]: https://github.com/ruby/irb/releases/tag/v1.18.0 [reline-v0.7.0]: https://github.com/ruby/reline/releases/tag/v0.7.0