NEWS for Ruby 3.4.0¶ ↑
This document is a list of user-visible feature changes since the 3.3.0 release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes¶ ↑
-
String
literals in files without afrozen_string_literal
comment now emit a deprecation warning when they are mutated. These warnings can be enabled with-W:deprecated
or by settingWarning[:deprecated] = true
. To disable this change, you can run Ruby with the--disable-frozen-string-literal
command line argument. [Feature #20205] -
it
is added to reference a block parameter. [Feature #18980] -
Keyword splatting
nil
when calling methods is now supported.**nil
is treated similarly to**{}
, passing no keywords, and not calling any conversion methods. [Bug #20064] -
Block passing is no longer allowed in index assignment (e.g.
a[0, &b] = 1
). [Bug #19918] -
Keyword arguments are no longer allowed in index assignment (e.g.
a[0, kw: 1] = 2
). [Bug #20218] -
GC.config
added to allow setting configuration variables on the Garbage Collector. [Feature #20443] -
GC
configuration parameterrgengc_allow_full_mark
introduced. Whenfalse
GC
will only mark young objects. Default istrue
. [Feature #20443]
Core classes updates¶ ↑
Note: We’re only listing outstanding class updates.
-
-
Exception#set_backtrace
now accepts arrays ofThread::Backtrace::Location
.Kernel#raise
,Thread#raise
andFiber#raise
also accept this new format. [Feature #13557]
-
-
-
Range#size
now raisesTypeError
if the range is not iterable. [Misc #18984] -
Range#step
now consistently has a semantics of iterating by using+
operator for all types, not only numerics. [Feature #18368](Time.utc(2022, 2, 24)..).step(24*60*60).take(3) #=> [2022-02-24 00:00:00 UTC, 2022-02-25 00:00:00 UTC, 2022-02-26 00:00:00 UTC]
-
-
-
Removed deprecated method Refinement#refined_class. [[Feature #19714]]
-
-
-
Add
RubyVM::AbstractSyntaxTree::Node#locations
method which returns location objects associated with the AST node. [Feature #20624] -
Add
RubyVM::AbstractSyntaxTree::Location
class which holds location information. [Feature #20624]
-
-
-
An optional
Fiber::Scheduler#blocking_operation_wait
hook allows blocking operations to be moved out of the event loop in order to reduce latency and improve multi-core processor utilization. [Feature #20876]
-
-
-
IO::Buffer#copy
can release the GVL, allowing other threads to run while copying data. [Feature #20902]
-
Stdlib updates¶ ↑
-
-
The keyword argument
anonymous: true
is implemented forTempfile.create
.Tempfile.create(anonymous: true)
removes the created temporary file immediately. So applications don't need to remove the file. [Feature #20497]
-
-
win32/sspi.rb
-
This library is now extracted from the Ruby repository to ruby/net-http-sspi. [Feature #20775]
-
The following default gem is added.
-
win32-registry 0.1.0
The following default gems are updated.
-
RubyGems 3.6.0.dev
-
benchmark 0.4.0
-
bundler 2.6.0.dev
-
date 3.4.0
-
delegate 0.4.0
-
erb 4.0.4
-
etc 1.4.4
-
fcntl 1.2.0
-
fiddle 1.1.6.dev
-
fileutils 1.7.3
-
io-console 0.8.0.beta1
-
ipaddr 1.2.7
-
irb 1.14.1
-
json 2.8.2
-
logger 1.6.1
-
net-http 0.5.0
-
open-uri 0.5.0
-
optparse 0.6.0
-
ostruct 0.6.1
-
pathname 0.4.0
-
pp 0.6.1
-
prism 1.0.0
-
pstore 0.1.4
-
psych 5.2.0
-
rdoc 6.8.1
-
reline 0.5.11
-
resolv 0.5.0
-
securerandom 0.3.2
-
shellwords 0.2.1
-
singleton 0.3.0
-
stringio 3.1.2.dev
-
strscan 3.1.1.dev
-
syntax_suggest 2.0.2
-
tempfile 0.3.1
-
time 0.4.1
-
timeout 0.4.2
-
tmpdir 0.3.0
-
uri 1.0.2
-
win32ole 1.9.0
-
yaml 0.4.0
-
zlib 3.2.0
The following bundled gem is added.
-
repl_type_completor 0.1.7
The following bundled gems are updated.
-
minitest 5.25.1
-
power_assert 2.0.4
-
rake 13.2.1
-
test-unit 3.6.2
-
rexml 3.3.9
-
rss 0.3.1
-
net-ftp 0.3.8
-
net-imap 0.5.1
-
net-smtp 0.5.0
-
prime 0.1.3
-
rbs 3.6.1
-
typeprof 0.21.11
-
debug 1.9.2
-
racc 1.8.1
The following bundled gems are promoted from default gems.
-
mutex_m 0.3.0
-
getoptlong 0.2.1
-
base64 0.2.0
-
bigdecimal 3.1.8
-
observer 0.1.2
-
abbrev 0.1.2
-
resolv-replace 0.1.1
-
rinda 0.2.0
-
drb 2.2.1
-
nkf 0.2.0
-
syslog 0.1.2
-
csv 3.3.0
See GitHub releases like GitHub Releases of Logger or changelog for details of the default gems or bundled gems.
Supported platforms¶ ↑
Compatibility issues¶ ↑
-
Error messages and backtrace displays have been changed.
-
Use a single quote instead of a backtick as an opening quote. [Feature #16495]
-
Display a class name before a method name (only when the class has a permanent name). [Feature #19117]
-
Kernel#caller
,Thread::Backtrace::Location
’s methods, etc. are also changed accordingly.Old:
test.rb:1:in `foo': undefined method `time' for an instance of Integer from test.rb:2:in `<main>'
New:
test.rb:1:in 'Object#foo': undefined method 'time' for an instance of Integer from test.rb:2:in '<main>'
-
-
Hash#inspect
rendering have been changed. [Bug #20433]-
Symbol
keys are displayed using the modern symbol key syntax:"{user: 1}"
-
Other keys now have spaces around
=>
:'{"user" => 1}'
, while previously they didn't:'{"user"=>1}'
-
Stdlib compatibility issues¶ ↑
C API updates¶ ↑
-
rb_newobj
andrb_newobj_of
(and corresponding macrosRB_NEWOBJ
,RB_NEWOBJ_OF
,NEWOBJ
,NEWOBJ_OF
) have been removed. [Feature #20265] -
Removed deprecated function
rb_gc_force_recycle
. [Feature #18290]
Implementation improvements¶ ↑
-
Array#each
is rewritten in Ruby for better performance [Feature #20182].
JIT¶ ↑
Miscellaneous changes¶ ↑
-
Passing a block to a method which doesn't use the passed block will show a warning on verbose mode (
-w
). [Feature #15554] -
Redefining some core methods that are specially optimized by the interpreter and JIT like
String#freeze
orInteger#+
now emits a performance class warning (-W:performance
orWarning[:performance] = true
). [Feature #20429]