-
-
Notifications
You must be signed in to change notification settings - Fork 941
Description
NEWS for Ruby 3.3.0
This document is a list of user-visible feature changes
since the 3.2.0 (see #7517 for 3.2 support) release, except for bug fixes.
Note that each entry is kept to a minimum, see links for details.
Language changes
Command line options
-
A new
performancewarning category was introduced.
They are not displayed by default even in verbose mode.
Turn them on with-W:performanceorWarning[:performance] = true. [Feature #19538] -
A new
RUBY_CRASH_REPORTenvironment variable was introduced to allow
redirecting Ruby crash reports to a file or sub command. See theBUG REPORT ENVIRONMENT
section of the ruby manpage for further details. [Feature #19790]
Core classes updates
Note: We're only listing outstanding class updates.
-
Array
- Array#pack now raises ArgumentError for unknown directives. [Bug #19150]
-
Dir
- Dir.for_fd added for returning a Dir object for the directory specified
by the provided directory file descriptor. [Feature #19347] - Dir.fchdir added for changing the directory to the directory specified
by the provided directory file descriptor. [Feature #19347] - Dir#chdir added for changing the directory to the directory specified by
the providedDirobject. [Feature #19347]
- Dir.for_fd added for returning a Dir object for the directory specified
-
MatchData
- MatchData#named_captures now accepts optional
symbolize_names
keyword. [Feature #19591]
- MatchData#named_captures now accepts optional
-
Module
- Module#set_temporary_name added for setting a temporary name for a
module. [Feature #19521]
- Module#set_temporary_name added for setting a temporary name for a
-
ObjectSpace::WeakKeyMap
- New core class to build collections with weak references.
The class use equality semantic to lookup keys like a regular hash,
but it doesn't hold strong references on the keys. [Feature #18498]
- New core class to build collections with weak references.
-
ObjectSpace::WeakMap
-
ObjectSpace::WeakMap#deletewas added to eagerly clear weak map
entries. [Feature #19561]
-
-
Proc
- Now Proc#dup and Proc#clone call
#initialize_dupand#initialize_clone
hooks respectively. [Feature #19362]
- Now Proc#dup and Proc#clone call
-
Process
- New
Process.warmupmethod that notify the Ruby virtual machine that the boot sequence is finished,
and that now is a good time to optimize the application. This is useful
for long-running applications. The actual optimizations performed are entirely
implementation-specific and may change in the future without notice. [Feature #18885]
- New
-
Process::Status
- Process::Status#& and Process::Status#>> are deprecated. [Bug #19868]
-
Queue
- Queue#freeze now raises TypeError. [Bug #17146]
-
Range
- Range#reverse_each can now process beginless ranges with an Integer endpoint. [Feature #18515]
- Range#reverse_each now raises TypeError for endless ranges. [Feature #18551]
-
Refinement
- Add Refinement#target as an alternative of Refinement#refined_class.
Refinement#refined_class is deprecated and will be removed in Ruby
3.4. [Feature #19714]
- Add Refinement#target as an alternative of Refinement#refined_class.
-
SizedQueue
- SizedQueue#freeze now raises TypeError. [Bug #17146]
-
String
- String#unpack now raises ArgumentError for unknown directives. [Bug #19150]
- String#bytesplice now accepts new arguments index/length or range of the
source string to be copied. [Feature #19314]
-
TracePoint
- TracePoint supports
rescueevent. When the raised exception was rescued,
the TracePoint will fire the hook.rescueevent only supports Ruby-level
rescue. [Feature #19572] (Add support for a rescue trace event #7788)
- TracePoint supports
Stdlib updates
-
RubyGems and Bundler warn if users require gem that is scheduled to become the bundled gems
in the future version of Ruby. [Feature #19351] [Feature #19776] [Feature #19843]Targeted libraries are:
- abbrev
- base64
- bigdecimal
- csv
- drb
- getoptlong
- mutex_m
- nkf
- observer
- racc
- resolv-replace
- rinda
- syslog
-
Socket#recv and Socket#recv_nonblock returns
nilinstead of an empty string on closed
connections. Socket#recvmsg and Socket#recvmsg_nonblock returnsnilinstead of an empty packet on closed
connections. [Bug #19012] -
Random::Formatter#alphanumeric is extended to accept optional
chars
keyword argument. [Feature #18183]
The following default gem is added.
- prism 0.18.0
The following default gems are updated.
- RubyGems 3.5.0.dev
- base64 0.2.0
- benchmark 0.3.0
- bigdecimal 3.1.5 (stubbed for JRuby)
- bundler 2.5.0.dev
- cgi 0.4.0
- csv 3.2.8
- date 3.3.4 (partially updated; stub JRuby gem)
- delegate 0.3.1
- drb 2.2.0
- english 0.8.0
- erb 4.0.3 (4.0.4 now, working through getting them to skip the ext on JRuby: https://github.com/ruby/erb/issues/52
- etc 1.4.3.dev.1 (no JRuby gem)
- fcntl 1.1.0 (no JRuby gem)
- fiddle 1.1.2
- fileutils 1.7.2
- find 0.2.0
- getoptlong 0.2.1
- io-console 0.6.1.dev.1
- irb 1.10.0
- json 2.7.0
- logger 1.6.0
- mutex_m 0.2.0
- net-http 0.4.0
- net-protocol 0.2.2
- nkf 0.1.3 (no JRuby gem)
- observer 0.1.2
- open-uri 0.4.0
- open3 0.2.0
- openssl 3.2.0 (no JRuby gem)
- optparse 0.4.0
- ostruct 0.6.0
- pathname 0.3.0 (no JRuby gem)
- pp 0.5.0
- prettyprint 0.2.0
- pstore 0.1.3
- psych 5.1.1.1
- rdoc 6.6.0
- reline 0.4.0
- rinda 0.2.0
- securerandom 0.3.0
- shellwords 0.2.0
- singleton 0.2.0
- stringio 3.1.1
- strscan 3.0.8
- syntax_suggest 1.1.0
- tempfile 0.2.0
- time 0.3.0
- timeout 0.4.1
- tmpdir 0.2.0 (no JRuby gem)
- tsort 0.2.0
- un 0.3.0
- uri 0.13.0
- weakref 0.1.3
- win32ole 1.8.10 (no JRuby gem)
- yaml 0.3.0
- zlib 3.1.0 (no JRuby gem)
The following bundled gem is promoted from default gems.
- racc 1.7.3
The following bundled gems are updated.
- minitest 5.20.0
- rake 13.1.0
- test-unit 3.6.1
- rexml 3.2.6
- rss 0.3.0
- net-imap 0.4.7
- net-smtp 0.4.0
- rbs 3.3.2 (no JRuby gem)
- typeprof 0.21.8 (no JRuby gem)
- debug 1.8.0 (no JRuby gem)
See GitHub releases like Logger or
changelog for details of the default gems or bundled gems.
Compatibility issues
-
Subprocess creation/forking via the following file open methods is deprecated. [Feature #19630]
- Kernel#open
- URI.open
- IO.binread
- IO.foreach
- IO.readlines
- IO.read
- IO.write
-
When given a non-lambda, non-literal block, Kernel#lambda with now raises
ArgumentError instead of returning it unmodified. These usages have been
issuing warnings under theWarning[:deprecated]category since Ruby 3.0.0.
[Feature #19777] -
The
RUBY_GC_HEAP_INIT_SLOTSenvironment variable has been deprecated and
removed. Environment variablesRUBY_GC_HEAP_%d_INIT_SLOTSshould be
used instead. [Feature #19785]
Stdlib compatibility issues
-
raccis promoted to bundled gems.- You need to add
raccto yourGemfileif you useraccunder bundler environment.
- You need to add
-
ext/readlineis retired- We have
relinethat is pure Ruby implementation compatible withext/readlineAPI. We rely onrelinein the future. If you need to useext/readline, you can installext/readlinevia rubygems.org withgem install readline-ext. - We no longer need to install libraries like
libreadlineorlibedit. - JRuby: Similar work will need to happen to unbundle the jruby-readline library. See Unbundle or rewrite jirb_swing #8066.
- We have
Implementation improvements
-
defined?(@ivar)is optimized with Object Shapes. - Name resolution such as
Socket.getaddrinfocan now be interrupted. [Feature #19965]
Undocumented:
- New NameError handling of #message (Stop using receiver#inspect for "undefined method" errors ruby/ruby#6950)