Skip to content

Ruby 3.3 support #8029

Description

@headius

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 performance warning category was introduced.
    They are not displayed by default even in verbose mode.
    Turn them on with -W:performance or Warning[:performance] = true. [Feature #19538]

  • A new RUBY_CRASH_REPORT environment variable was introduced to allow
    redirecting Ruby crash reports to a file or sub command. See the BUG 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 provided Dir object. [Feature #19347]
  • MatchData

    • MatchData#named_captures now accepts optional symbolize_names
      keyword. [Feature #19591]
  • Module

    • Module#set_temporary_name added for setting a temporary name for a
      module. [Feature #19521]
  • 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]
  • ObjectSpace::WeakMap

    • ObjectSpace::WeakMap#delete was added to eagerly clear weak map
      entries. [Feature #19561]
  • Proc

    • Now Proc#dup and Proc#clone call #initialize_dup and #initialize_clone
      hooks respectively. [Feature #19362]
  • Process

    • New Process.warmup method 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]
  • Process::Status

    • Process::Status#& and Process::Status#>> are deprecated. [Bug #19868]
  • Queue

  • 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]
  • 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

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 nil instead of an empty string on closed
    connections. Socket#recvmsg and Socket#recvmsg_nonblock returns nil instead 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 the Warning[:deprecated] category since Ruby 3.0.0.
    [Feature #19777]

  • The RUBY_GC_HEAP_INIT_SLOTS environment variable has been deprecated and
    removed. Environment variables RUBY_GC_HEAP_%d_INIT_SLOTS should be
    used instead. [Feature #19785]

Stdlib compatibility issues

  • racc is promoted to bundled gems.
    • You need to add racc to your Gemfile if you use racc under bundler environment.
  • ext/readline is retired
    • We have reline that is pure Ruby implementation compatible with ext/readline API. We rely on reline in the future. If you need to use ext/readline, you can install ext/readline via rubygems.org with gem install readline-ext.
    • We no longer need to install libraries like libreadline or libedit.
    • JRuby: Similar work will need to happen to unbundle the jruby-readline library. See Unbundle or rewrite jirb_swing #8066.

Implementation improvements

  • defined?(@ivar) is optimized with Object Shapes.
  • Name resolution such as Socket.getaddrinfo can now be interrupted. [Feature #19965]

Undocumented:

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions