NEWS for Ruby 3.1.0

[edit]

このドキュメントは前回リリース以降のバグ修正を除くユーザーに影響のある機能の変更のリストです。

それぞれのエントリーは参照情報があるため短いです。十分な情報と共に書かれた全ての変更のリストはリンク先を参照してください。

言語仕様の変更

def foo(&)
  bar(&)
end
Prime.each_cons(2).lazy.find_all{_1 in [n, ^(n + 2)]}.take(3).to_a
#=> [[3, 5], [5, 7], [11, 13]]
@n = 5
Prime.each_cons(2).lazy.find{_1 in [n, ^@n]}
#=> [3, 5]
[0, 1] => _, x
{y: 2} => y:
x #=> 1
y #=> 2

foo[0] = bar
  1. `foo`
  2. `bar`
  3. `[]=` called on the result of `foo`

foo[0], bar.baz = a, b
  1. `a`
  2. `b`
  3. `foo`
  4. `[]=` called on the result of `foo`
  5. `bar`
  6. `baz=` called on the result of `bar`
  1. `foo`
  2. `bar`
  3. `a`
  4. `b`
  5. `[]=` called on the result of `foo`
  6. `baz=` called on the result of `bar`

コマンドラインオプション

組み込みクラスの更新(注目すべきもののみ)

Class#subclasses

class A; end
class B < A; end
class C < B; end
class D < A; end
A.subclasses    #=> [D, B]
B.subclasses    #=> [C]
C.subclasses    #=> []
Enumerable#each_cons Enumerable#each_slice

[1, 2, 3].each_cons(2){}
# 3.0 => nil
# 3.1 => [1, 2, 3]

[1, 2, 3].each_slice(2){}
# 3.0 => nil
# 3.1 => [1, 2, 3]
Time.new

Time.new(2021, 12, 25, in: "+07:00")
#=> 2021-12-25 00:00:00 +0700
Time.new

Time.new(2021, 12, 25, "+07:30")
#=> invalid value for Integer(): "+07:30" (ArgumentError)

標準添付ライブラリの更新(機能追加とバグ修正を除く)

互換性 (機能追加とバグ修正を除く)

標準添付ライブラリの互換性

C API の更新

実装の改善

JIT

MJIT

YJIT

新しいJITコンパイラが実験的な機能として利用可能です。 [feature#18229]

詳細はブログ(https://shopify.engineering/yjit-just-in-time-compiler-cruby)を参照してください。

静的解析

RBS

# `T` must be compatible with the `_Output` interface.
# `PrettyPrint[String]` is ok, but `PrettyPrint[Integer]` is a type error.
class PrettyPrint[T < _Output]
  interface _Output
    def <<: (String) -> void
  end

  attr_reader output: T

  def initialize: (T output) -> void
end
# Defines a generic type `list`.
type list[T] = [ T, list[T] ]
             | nil

type str_list = list[String]
type int_list = list[Integer]

詳細はCHANGELOG.md(https://github.com/ruby/rbs/blob/cdd6a3a896001e25bd1feda3eab7f470bae935c1/CHANGELOG.md)を参照してください。

TypeProf

Debugger

error_highlight

error_highlightが組み込みgemに導入されました。バックトレースで詳細なエラー位置を表示します。



title = json[:article][:title]

jsonがnilの時、

$ ruby test.rb
test.rb:2:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)

title = json[:article][:title]
            ^^^^^^^^^^

json[:article] が返す時、

$ ruby test.rb
test.rb:2:in `<main>': undefined method `[]' for nil:NilClass (NoMethodError)

title = json[:article][:title]
                      ^^^^^^^^

この機能はデフォルトで有効になっています。 --disable-error_highlight コマンドラインオプションを指定することで無効化できます。詳細はリポジトリ(https://github.com/ruby/error_highlight)を参照してください。

IRBのオートコンプリートとドキュメント表示

IRBにオートコンプリート機能が実装され、コードを入力するだけで補完候補ダイアログが表示されるようになりました。TabやShift+Tabで上下に移動できます。

また、補完候補を選択している時に、ドキュメントがインストールされている場合、補完候補ダイアログの横にドキュメントダイアログが表示され、内容の一部が表示されます。Alt+dを押すことでドキュメント全文を読むことができます。

その他の変更