6.0 KiB
NEWS for Ruby 3.2.0
This document is a list of user-visible feature changes since the 3.1.0 release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes
-
Anonymous rest and keyword rest arguments can now be passed as arguments, instead of just used in method parameters. [Feature #18351]
def foo(*) bar(*) end def baz(**) quux(**) end
-
A proc that accepts a single positional argument and keywords will no longer autosplat. [Bug #18633]
proc{|a, **k| a}.call([1, 2]) # Ruby 3.1 and before # => 1 # Ruby 3.2 and after # => [1, 2]
-
Constant assignment evaluation order for constants set on explicit objects has been made consistent with single attribute assignment evaluation order. With this code:
foo::BAR = baz
foo
is now called beforebaz
. Similarly, for multiple assignment to constants, left-to-right evaluation order is used. With this code:foo1::BAR1, foo2::BAR2 = baz1, baz2
The following evaluation order is now used:
foo1
foo2
baz1
baz2
-
Find pattern is no longer experimental. [Feature #18585]
Command line options
Core classes updates
Note: We're only listing outstanding class updates.
-
Hash
- Hash#shift now always returns nil if the hash is empty, instead of returning the default value or calling the default proc. [Bug #16908]
-
Kernel
- Kernel#binding raises RuntimeError if called from a non-Ruby frame (such as a method defined in C). [Bug #18487]
-
MatchData
- MatchData#byteoffset has been added. [Feature #13110]
-
Module
- Module.used_refinements has been added. [Feature #14332]
- Module#refinements has been added. [Feature #12737]
- Module#const_added has been added. [Feature #17881]
-
Proc
- Proc#dup returns an instance of subclass. [Bug #17545]
- Proc#parameters now accepts lambda keyword. [Feature #15357]
-
Refinement
- Refinement#refined_class has been added. [Feature #12737]
-
Set
- Set is now available as a builtin class without the need for
require "set"
. [Feature #16989] It is currently autoloaded via theSet
constant or a call toEnumerable#to_set
.
- Set is now available as a builtin class without the need for
-
String
- String#byteindex and String#byterindex have been added. [Feature #13110]
- Update Unicode to Version 14.0.0 and Emoji Version 14.0. [Feature #18037] (also applies to Regexp)
- String#bytesplice has been added. [Feature #18598]
-
Struct
- A Struct class can also be initialized with keyword arguments
without
keyword_init: true
onStruct.new
[Feature #16806]
- A Struct class can also be initialized with keyword arguments
without
-
TracePoint
- TracePoint#binding now returns
nil
forc_call
/c_return
TracePoints. [Bug #18487] - TracePoint#enable
target_thread
keyword argument now defaults to the current thread iftarget
andtarget_line
keyword arguments are not passed. [Bug #16889]
- TracePoint#binding now returns
Stdlib updates
- The following default gem are updated.
- RubyGems 3.4.0.dev
- bigdecimal 3.1.2
- bundler 2.4.0.dev
- cgi 0.3.2
- etc 1.4.0
- io-console 0.5.11
- io-wait 0.2.2.pre1
- ipaddr 1.2.4
- logger 1.5.1
- net-protocol 0.1.3
- ostruct 0.5.5
- reline 0.3.1
- securerandom 0.2.0
- The following bundled gems are updated.
- net-imap 0.2.3
- rbs 2.3.0
- typeprof 0.21.2
- debug 1.5.0
- The following default gems are now bundled gems.
Compatibility issues
Note: Excluding feature bug fixes.
Removed constants
The following deprecated constants are removed.
Fixnum
andBignum
[Feature #12005]Random::DEFAULT
[Feature #17351]Struct::Group
Struct::Passwd
Removed methods
The following deprecated methods are removed.
Dir.exists?
[Feature #17391]File.exists?
[Feature #17391]Kernel#=~
[Feature #15231]Kernel#taint
,Kernel#untaint
,Kernel#tainted?
[Feature #16131]Kernel#trust
,Kernel#untrust
,Kernel#untrusted?
[Feature #16131]
Stdlib compatibility issues
Psych
no longer bundles libyaml sources. Users need to install the libyaml library themselves via the package system. [Feature #18571]
C API updates
Removed C APIs
The following deprecated APIs are removed.
rb_cData
variable.- "taintedness" and "trustedness" functions. [Feature #16131]