NEWS for Ruby 3.0.0

[edit]

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

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

言語仕様の変更


pr = proc{|*a, **kw| [a, kw]}

pr.call([1])
# 2.7 => [[1], {}]
# 3.0 => [[[1]], {}]

pr.call([1, {a: 1}])
# 2.7 => [[1], {:a=>1}] # and deprecation warning
# 3.0 => [[[1, {:a=>1}]], {}]
def method_missing(meth, ...)
  send(:"do_#{meth}", ...)
end
0 => a
p a #=> 0

{b: 0, c: 1} => {b:}
p b #=> 0
# version 3.0
0 in 1 #=> false

# version 2.7
0 in 1 #=> raise NoMatchingPatternError
case ["a", 1, "b", "c", 2, "d", "e", "f", 3]
in [*pre, String => x, String => y, *post]
  p pre  #=> ["a", 1]
  p x    #=> "b"
  p y    #=> "c"
  p post #=> [2, "d", "e", "f", 3]
end
def square(x) = x * x

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

--help オプション

環境変数 RUBY_PAGER または PAGER が空ではない文字列を指定され、標準入出力が tty である場合、--help オプションはページャーを通してヘルプメッセージを表示するようになりました。 [feature#16754]

--backtrace-limit オプション

--backtrace-limit オプションはバックトレースの最大行数を指定できるようになりました。 [feature#8661]

組み込みクラスの更新

注目すべきもののみ記載します。


dirty_data = ['--', 'data1', '--', 'data2', '--', 'data3']
dirty_data[(1..).step(2)] # take each second element
# => ["data1", "data2", "data3"]

class C; end
module M1; end
module M2; end
C.include M1
M1.include M2
p C.ancestors #=> [C, M1, M2, Object, Kernel, BasicObject]

標準添付ライブラリの更新

注目すべきもののみ記載します。

互換性

機能追加とバグ修正は除いています。


/foo/.frozen? #=> true
(42...).frozen? # => true

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

C API の更新

実装の改善

JIT

静的解析

RBS

TypeProf


# test.rb
def foo(x)
  if x > 10
    x.to_s
  else
    nil
  end
end

foo(42)
$ typeprof test.rb
# Classes
class Object
  def foo : (Integer) -> String?
end

その他の変更