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.
Array
Array#packaccepts a new formatRandrfor unpacking unsigned and signed LEB128 encoded integers. [Feature #21785]
ENV
ENV.fetch_valuesis added. It returns an array of values for the given names, raisingKeyErrorfor missing names unless a block is given. [[Feature #21781]]
Kernel
Kernel#autoload_relativeandModule#autoload_relativeare added. These methods work likeautoload, but resolve the file path relative to the file where the method is called, similar torequire_relative. This makes it easier to autoload constants from files in the same directory without hardcoding absolute paths or manipulating$LOAD_PATH. [Feature #15330]
MatchData
MatchData#integer_atis added. It converts the matched substring to integer and return the result. [Feature #21932]
Regexp
- All instances of
Regexpare now frozen, not just literals. Subclasses ofRegexpare not frozen for compatibility. [Feature #8948]
- All instances of
Set
- A deprecated behavior,
Set#to_set,Range#to_set, andEnumerable#to_setaccepting arguments, was removed. [Feature #21390]
- A deprecated behavior,
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.
- tsort 0.2.0
- win32-registry 0.1.2
The following default gem is added.
The following default gems are updated.
- RubyGems 4.1.0.dev
- bundler 4.1.0.dev
- json 2.19.3
- openssl 4.0.1
- 4.0.0 to v4.0.1
- prism 1.9.0
- 1.8.1 to v1.9.0
- resolv 0.7.1
- 0.7.0 to v0.7.1
- stringio 3.2.1.dev
- strscan 3.1.7.dev
- 3.1.6 to v3.1.7
- syntax_suggest 2.0.3
- timeout 0.6.1
- 0.6.0 to v0.6.1
- zlib 3.2.3
- 3.2.2 to v3.2.3
The following bundled gems are updated.
- minitest 6.0.3
- test-unit 3.7.7
- net-imap 0.6.3
- 0.6.2 to v0.6.3
- rbs 4.0.2
- mutex_m 0.3.0
- bigdecimal 4.1.1
- resolv-replace 0.2.0
- 0.1.1 to v0.2.0
- syslog 0.4.0
- 0.3.0 to v0.4.0
- repl_type_completor 0.1.15
- pstore 0.2.1
- 0.2.0 to v0.2.1
- rdoc 7.2.0
- win32ole 1.9.3
- 1.9.2 to v1.9.3
- irb 1.17.0
- 1.16.0 to v1.17.0
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
The
RUBY_TYPED_EMBEDDABLEflag is now public and documented and can be used by C extensions. It allows allocating C structs directly into Ruby object slots, which reduces pointer chasing, and in some case memory usage. See the C extension documentation for details. [Feature #21853]Added new C23 inspired allocator functions, that takes the previous memory size. This allow the Ruby GC to better keep track of memory usage, improving its heuristics. It also improves the performance of system allocators that support C23
free_sized.
However, it is important to note that passing an incorrect size to these function is undefined behavior and may result in crashes or memory leaks.
ruby_xfree_sized(void *ptr, size_t size)ruby_xrealloc_sized(void *ptr, size_t newsiz, size_t oldsiz)ruby_xrealloc2_sized(void *ptr, size_t newelems, size_t newsiz, size_t oldelems)
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.