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

The following evaluation order is used:

  1. foo

  2. bar

  3. []= called on the result of foo

In Ruby before 3.1.0, multiple assignment did not follow this evaluation order. With this code:

```ruby
foo[0], bar.baz = a, b
```

Versions of Ruby before 3.1.0 would evaluate in the following order

  1. a

  2. b

  3. foo

  4. []= called on the result of foo

  5. bar

  6. baz= called on the result of bar

Starting in Ruby 3.1.0, evaluation order is now consistent with single assignment, with the left hand side being evaluated before the right hand side:

  1. foo

  2. bar

  3. a

  4. b

  5. []= called on the result of foo

  6. baz= called on the result of bar

[Bug #4443]

Command line options

Core classes updates

Outstanding ones only.

Stdlib updates

Outstanding ones only.

Compatibility issues

Excluding feature bug fixes.

Stdlib compatibility issues

C API updates

Implementation improvements

JIT

Static analysis

RBS

TypeProf

Miscellaneous changes