Ruby 3.0.0 preview1 がリリースと非推奨の警告がデフォルトではでなくなる予定

Ruby 3.0.0 preview1 がリリースされました。めでたい。

気になる機能はあとでまとめるとして NEWS には載ってなかった変更点をちょっと書きます。 ただし、この変更は Ruby 2.7.2 で取り込まれる予定なので Ruby 3.0.0 での変更点というとちょっと語弊があるかもしれません。

非推奨の警告がデフォルトではでなくなる

※この変更は Ruby 2.7.2 で適用される予定になっており Ruby 3.0.0 preview1 で先行して適用された機能になります(間違ってたらゴメンネ。

例えば Ruby 2.7.1 では以下のようが Enumerator.new を使用すると警告が出ます。

p RUBY_DESCRIPTION
# => "ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin17]"

# warning: Enumerator.new without a block is deprecated; use Object#to_enum instead
Enumerator.new(1, :each)

しかし、Ruby 3.0.0 preview1 ではこのような『非推奨の警告』はデフォルトではでなくなります。

p RUBY_DESCRIPTION
# => "ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-darwin17]"

# no warning
Enumerator.new(1, :each)

これは件のキーワード引数周りの変更の影響で Ruby が『非推奨の警告はデフォルトでは出さないようにする』と方針転換したためです。 詳細は以下のチケットで。

また、非推奨の警告を表示したい場合は Ruby の起動オプションで -w を追加したり、コード上で Warning[:deprecated] = true を呼び出すと非推奨の警告が表示されるようになります。

p RUBY_DESCRIPTION
# => "ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-darwin17]"

# 非推奨の警告が表示されるようになる
Warning[:deprecated] = true

# warning: Enumerator.new without a block is deprecated; use Object#to_enum instead
Enumerator.new(1, :each)

この変更自体は賛否両論あると思うんですがまあこれからはちゃんと -w をつけたり Warning[:deprecated] = true したりしてコードを動かしましょうって流れにはなりそうですねー。 また、先程も書いたんですがこの変更は Ruby 2.7.2 から取り込まれる予定です。