ruby-trunk-changes 2020-05-21

今日は GC.compact の潜在的不具合修正や cygwin でのビルドエラー修正などがありました。

[ff58cbce94] S-H-GAMELINKS 2020-05-20 11:27:47 UTC

Hash#fetch_values の実装である関数 rb_hash_fetch_values() に static 修飾子を追加しています。

[891e253ee7] Aaron Patterson 2020-01-29 00:33:04 UTC

VM 命令を生成してる途中に GC.compact で作成中の ISeq に関連するオブジェクトが移動されてしまうと不具合になるので、利用中であることを示す pinned_list という linked list で管理して GC.compact で移動できないよう GC の mark 処理時に pin down するようにしています。GC されないようにするための mark 用配列から C 言語実装の linked list にしたようですけど Array の要素だと重複して mark されるからかな。

[a3e79c1764] git 2020-05-20 18:17:08 UTC

version.h の日付更新

[6e7e7c1e57] Aaron Patterson 2020-05-20 20:44:09 UTC

gc_is_moveable_obj() で VALUE が指すオブジェクトが GC.compact で移動できるかの判定に pinned のフラグがついているかだけでなく GC の mark もついていることを条件に追加しています。 GC.compact は mark して(同時に移動できないオブジェクトは pin down して)行ないますが、GC は incremental に行なわれるので pinned のフラグが立ってなくてもまだ確保してから mark がされてないだけという場合も考慮して mark されていることも条件にしているようです。 sweep phase が先に済んでしまうと実際は移動できるけど移動できないと判定することもありえるけど保守的に倒すということのようですね。

[140d4e4a5f] Burdette Lamar 2020-05-20 22:57:38 UTC

Hash の rdoc 用コメントの call-seq の整理や説明の追加など。 https://github.com/ruby/ruby/pull/3121

[43725c6091] 卜部昌平 2020-05-20 06:44:37 UTC

rb_scan_args_set() inline 関数のちょっとしたリファクタリング

[6f167da65b] Nobuyoshi Nakada 2020-05-21 01:43:06 UTC

0e3b0fcdba70cf96a8e0654eb8f50aacb8024bd4 の blocking Fiber 導入時に io.c の cygwin 専用の preprocessor 分岐内の部分で変数名参照の間違いがあってビルドエラーになっていたのを修正。 [ruby-core:98452] [Bug #16903]

[3eb3f7bb8c] Yusuke Endoh 2020-05-21 04:16:42 UTC

ブロック引数を渡したメソッド呼び出しがオブジェクトを確保しないことをテストする時に ObjectSpace.count_objects を使って生成されたオブジェクト数でテストしていたのを:TOTAL でチェックしていたのを Proc を想定して :T_DATA の数で比較するようにしています。

[62b47196e4] Nobuyoshi Nakada 2020-05-21 02:55:55 UTC

43725c60915753a88224583fafc87c0bac7c5422リファクタリングした rb_scan_args_set() の末尾に UNREACHABLE_RETURN() を追加して処理が戻らないことを明示するようにしています。

[ba7f4bb0af] Nobuyoshi Nakada 2020-05-21 03:00:33 UTC

rb_scan_args_assign() や rb_scan_args_result() の定義も 43725c60915753a88224583fafc87c0bac7c5422 にあわせたリファクタリングを施しています。