ruby/NEWS.md

2.7 KiB

NEWS for Ruby 3.1.0

This document is a list of user visible feature changes since the 3.0.0 release, except for bug fixes.

Note that each entry is kept to a minimum, see links for details.

Language changes

  • Pin operator now takes an expression. [Feature #17411]

    Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
    #=> [[3, 5], [5, 7], [11, 13]]
    

Command line options

Core classes updates

Outstanding ones only.

  • Array

  • Enumerable

  • Enumerator::Lazy

  • File

    • File.dirname now accepts an optional argument for the level to strip path components. [Feature #12194]
  • Module

    • Module#prepend now modifies the ancestor chain if the receiver already includes the argument. Module#prepend still does not modify the ancestor chain if the receiver has already prepended the argument. [Bug #17423]
  • Struct

    • Passing only keyword arguments to Struct#initialize is warned. You need to use a Hash literal to set a Hash to a first member. [Feature #16806]
  • Queue

    • Queue#initialize now accepts an Enumerable of initial values. [Feature #17327]
  • Thread::Backtrace

    • Thread::Backtrace.limit, which returns the value to limit backtrace length set by --backtracse-limit command line option, is added. [Feature #17479]
  • $LOAD_PATH

Stdlib updates

Outstanding ones only.

Compatibility issues

Excluding feature bug fixes.

Stdlib compatibility issues

  • ERB#initialize warns safe_level and later arguments even without -w. [Feature #14256]

C API updates

Implementation improvements

JIT

  • RubyVM::MJIT is renamed to RubyVM::JIT.

Static analysis

RBS

TypeProf

Miscellaneous changes