ruby/NEWS.md

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 before baz. 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:

    1. foo1
    2. foo2
    3. baz1
    4. baz2

    [Bug #15928]

  • 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

  • Module

  • Proc

  • Refinement

  • Set

    • Set is now available as a builtin class without the need for require "set". [Feature #16989] It is currently autoloaded via the Set constant or a call to Enumerable#to_set.
  • 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 on Struct.new [Feature #16806]
  • TracePoint

    • TracePoint#binding now returns nil for c_call/c_return TracePoints. [Bug #18487]
    • TracePoint#enable target_thread keyword argument now defaults to the current thread if target and target_line keyword arguments are not passed. [Bug #16889]

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.

Removed methods

The following deprecated methods are removed.

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]

Implementation improvements

JIT

MJIT

YJIT: New experimental in-process JIT compiler

Static analysis

RBS

TypeProf

Debugger

error_highlight

IRB Autocomplete and Document Display

Miscellaneous changes