2021/12/23 今回の気になった bugs.ruby のチケット
今週は Ruby 3.1 で Class.descendants
が Revert されたりしました。
[Feature #14394] Class.descendants
.descendants
はレシーバが『継承されている』クラスの一覧を返すメソッドの追加の提案
class A; end class B < A; end class C < B; end pp A.descendants #=> [B, C] pp B.descendants #=> [C] pp C.descendants #=> []
- 元々は Ruby 3.1 で追加される予定だったがいくつか問題があり Ruby 3.1 からは Revert された
- CI が不安定になり SEGV したりしてたらしい
- https://bugs.ruby-lang.org/issues/14394#note-32
- matz のコメントは以下を参照
- https://bugs.ruby-lang.org/issues/14394#note-38
Class#descendants
を導入するにあたってまだ議論する余地があるとのこと
- また Rails 7.0.0 ではこの
Class#descendants
(正確にいうとClass#subclass
の有無で?)を使用するような対応してたので Rails 7.0.1 で削除された事に対応される予定- https://bugs.ruby-lang.org/issues/14394#note-36
- 対応 PR : https://github.com/rails/rails/pull/43951
- なので Ruby 3.1 x Rails 7.0.0 の組み合わせだと死にそう…
- ちなみに似たようなメソッドに
Class#subclasses
が入るんですがこっちはそのまま Ruby 3.1 に追加される予定
[Bug #17866] Incompatible changes with Psych 4.0.0
- このチケットは Psych 4.0.0 が非互換になるのでそれの対応をするチケット
- Psych 4.0.0 から
Psych.load
がPsych.safe_load
に置き換わった影響で非互換になった - また以前はオプショナル引数 + キーワード引数を受け取っていたが 4.0.0 からはキーワード引数のみ受け取るようになった
- 参照
- Psych 4.0.0 から
- 当時議論していた時は Psych 4.0.0 は Ruby 3.1 ではバンドルしない想定だったが最終的には Ruby 3.1 にバンドルされることになった
- 結論が出ないままリリース直前になったのでそのままリリースされる流れになったっぽい
- Ruby 3.1 で Psych (YAML) を使う場合は注意する必要があります