9.2 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 = bazfoois now called beforebaz. Similarly, for multiple assignments to constants, left-to-right evaluation order is used. With this code:foo1::BAR1, foo2::BAR2 = baz1, baz2The following evaluation order is now used: - foo1
- foo2
- baz1
- baz2
 
- 
Find pattern is no longer experimental. [Feature #18585] 
- 
Methods taking a rest parameter (like *args) and wishing to delegate keyword arguments throughfoo(*args)must now be marked withruby2_keywords(if not already the case). In other words, all methods wishing to delegate keyword arguments through*argsmust now be marked withruby2_keywords, with no exception. This will make it easier to transition to other ways of delegation once a library can require Ruby 3+. Previously, theruby2_keywordsflag was kept if the receiving method took*args, but this was a bug and an inconsistency. A good technique to find the potentially-missingruby2_keywordsis to run the test suite, for where it fails find the last method which must receive keyword arguments, useputs nil, caller, nilthere, and check each method/block on the call chain which must delegate keywords is correctly marked asruby2_keywords. [Bug #18625] [Bug #16466]def target(**kw) end # Accidentally worked without ruby2_keywords in Ruby 2.7-3.1, ruby2_keywords # needed in 3.2+. Just like (*args, **kwargs) or (...) would be needed on # both #foo and #bar when migrating away from ruby2_keywords. ruby2_keywords def bar(*args) target(*args) end ruby2_keywords def foo(*args) bar(*args) end foo(k: 1)
Command line options
Core classes updates
Note: We're only listing outstanding class updates.
- 
Encoding - Encoding#replicate has been deprecated and will be removed in 3.3. [Feature #18949]
- The dummy Encoding::UTF_16andEncoding::UTF_32encodings no longer try to dynamically guess the endian based on a byte order mark. UseEncoding::UTF_16BE/UTF_16LEandEncoding::UTF_32BE/UTF_32LEinstead. This change speeds up getting the encoding of a String. [Feature #18949]
 
- 
Enumerator - Enumerator.product has been added. Enumerator::Product is the implementation. [Feature #18685]
 
- 
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]
 
- 
Integer - Integer#ceildiv has been added. [Feature #18809]
 
- 
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]
- Module#undefined_instance_methods has been added. [Feature #12655]
 
- 
Proc - Proc#dup returns an instance of subclass. [Bug #17545]
- Proc#parameters now accepts lambda keyword. [Feature #15357]
 
- 
Regexp - Regexp.new now supports passing the regexp flags not only as an Integer,
but also as a String Unknown flags raise errors.  Otherwise, anything
other than true,false,nilor Integer will be warned. [Feature #18788]
 
- Regexp.new now supports passing the regexp flags not only as an Integer,
but also as a String Unknown flags raise errors.  Otherwise, anything
other than 
- 
Refinement - Refinement#refined_class has been added. [Feature #12737]
 
- 
Set - Set is now available as a built-in class without the need for require "set". [Feature #16989] It is currently autoloaded via theSetconstant or a call toEnumerable#to_set.
 
- Set is now available as a built-in 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: trueonStruct.new[Feature #16806]
 
- A Struct class can also be initialized with keyword arguments
without 
- 
TracePoint - TracePoint#binding now returns nilforc_call/c_returnTracePoints. [Bug #18487]
- TracePoint#enable target_threadkeyword argument now defaults to the current thread iftargetandtarget_linekeyword arguments are not passed. [Bug #16889]
 
- TracePoint#binding now returns 
Stdlib updates
- 
SyntaxSuggest - The feature of syntax_suggestformerlydead_endis integrated in Ruby. [Feature #18159]
 
- The feature of 
- 
The following default gems are updated. - RubyGems 3.4.0.dev
- bigdecimal 3.1.2
- bundler 2.4.0.dev
- cgi 0.3.2
- date 3.2.3
- error_highlight 0.4.0
- etc 1.4.0
- io-console 0.5.11
- io-nonblock 0.1.1
- io-wait 0.3.0.pre
- ipaddr 1.2.4
- json 2.6.2
- logger 1.5.1
- net-http 0.2.2
- net-protocol 0.1.3
- ostruct 0.5.5
- psych 5.0.0.dev
- reline 0.3.1
- securerandom 0.2.0
- set 1.0.3
- stringio 3.0.3
- syntax_suggest 0.0.1
- timeout 0.3.0
 
- 
The following bundled gems are updated. - minitest 5.16.3
- net-imap 0.2.3
- rbs 2.6.0
- typeprof 0.21.3
- debug 1.6.2
 
- 
The following default gems are now bundled gems. 
Compatibility issues
Note: Excluding feature bug fixes.
Removed constants
The following deprecated constants are removed.
- Fixnumand- Bignum[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
- Psychno 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_cDatavariable.
- "taintedness" and "trustedness" functions. [Feature #16131]
Implementation improvements
- Fixed several race conditions in Kernel#autoload. [Bug #18782]
JIT
YJIT
- Support arm64 / aarch64 on UNIX platforms.
- Building YJIT requires Rust 1.58.1+. [Feature #18481]
