ruby-trunk-changes 2021-05-22

今日は Refinements によるメソッドの可視性についての挙動が変化したのを戻す変更や Array#sort! のブロック呼び出し中に receiver が freeze された時の挙動の修正などがありました。

[636d4f7eb9] Alan Wu 2021-05-20 22:52:32 UTC

Refinements で上書きしたメソッドが元のメソッドの可視性(private など)の影響を受けて呼べないというのを修正しているようです。private に明示的に Symbol を渡して定義した時だけ呼べなくて、Module#prepend が追加されたり private でモードを変更後にメソッド定義された場合は呼べるので一貫性を保つためということみたいです。 [ruby-core:103576] [Bug #17822]

[0772f1b583] git 2021-05-21 16:12:48 UTC

version.h の日付更新

[b2fc592c30] Alan Wu 2021-05-21 16:13:55 UTC

RubyVM::InstructionSequence.load_from_binary で TS_CDHASH という特別な種類の Hash のオペランドをロードする時に通常の Hash として再現してしまっていたので、専用の処理を追加してちゃんと st_table::type に専用の型を指定した Hash オブジェクトを生成するように修正しています。通常の Hash だと配列による実装の時のメソッド呼び出しが発生することがあって leaf のはずの命令が leaf でなくなってしまう(例外が発生しうるようになる)という問題があったようです。

[8b00bfb7c2] Jeremy Evans 2021-05-22 01:33:56 UTC

Array#sort! が receiver が渡されたブロックを呼んだ間に freeze されると FrozenError が発生するものの内容は変更されてしまっていたという不具合を修正しています。うーんなるほど。 [ruby-core:102963] [Bug #17739]

[c4162a4cb8] Nobuyoshi Nakada 2021-05-22 05:32:22 UTC

8b00bfb7c2c33827490c78a16c44b102cb0d724b で追加した Array#sort! のテストを少し修正しています。Array#sort! でブロックに渡される要素の順番は指定されてないので、要素で freeze するタイミングを決めるのではなくて専用のカウンタを導入して何回目かで決めるようにしています。 [ruby-core:102963] [Bug #17739]

[141861a222] Takashi Kokubun 2021-05-22 06:19:46 UTC

vm_core.h の構造体 struct rb_iseq_constant_body の builtin_inline_p メンバーについてのコメントをもっと詳しくしてチケットへの参照も追記しています。

[fb4195b969] Takashi Kokubun 2021-05-22 06:36:55 UTC

tool/extlibs.rb で外部ライブラリのダウンロード(もしくはキャッシュの利用)を実行する時に例外が発生した時に警告に出すのを Exception#inspect から Exception#full_message の結果にしてバックトレースも表示されるようにしています。 GitHub Actions で起きたエラーの原因を調べるためみたいです。