ruby-trunk-changes 2020-12-01

今日は Ractor 間でのオブジェトのコピーの不具合修正や拡張ライブラリにメソッドを ractor safe に宣言するための C API の追加などがありました。

[56bb6e7d58] Aaron Patterson 2020-11-30 21:28:24 UTC

rb_execution_context_t の mark 関数と update(GC.compact による参照の移動の追随)関数で現在の ep がローカル変数をもつフレームじゃなかった時に遡って VM_ENV_LOCAL_P() が真になるまで辿ってましたが現在の ep のみ処理するようにしています。ここでループしなくても control frame が全て処理されるので冗長だったということみたいです。というかコミットログによるとむしろこれで Rails のテストの SEGV が修正されるとのことで、むしろ辿っちゃだめだったみたいですね。なんでだろう。

[750e2d9e5e] git 2020-11-30 22:45:56 UTC

version.h の日付更新

[e25165b3fc] Marc-Andre Lafortune 2020-11-30 20:51:30 UTC

930a135524382ddd80c0608a7593b6cdfceee846 の追加修正で Ractor.shareable? の実装で rb_obj_traverse() のかえりがけの処理は不要になってたので null_leave() という関数を渡すようにしています。 https://github.com/ruby/ruby/pull/3823

[e79f1941b2] Koichi Sasada 2020-11-30 16:27:04 UTC

make test-all に --timetable-data というオプションを追加して各テストケースの実行開始/終了の時刻の情報をファイルにダンプできるようにしています。またテストの変更実行時に TestJIT テストクラスを実行対象からはずすためクラス変数 @@test_suites をいじっています。

[67693d8d80] Koichi Sasada 2020-11-27 19:39:09 UTC

Ractor local storage の C API として rb_ractor_local_storage_value_newkey()、rb_ractor_local_storage_value()、rb_ractor_local_storage_value_set()、rb_ractor_local_storage_ptr_newkey()、rb_ractor_local_storage_ptr()、rb_ractor_local_storage_ptr_set() などの関数群を追加しています。

[a67cd8a888] James Koenig 2020-11-30 20:48:31 UTC

doc/syntax/literals.rdoc の -> 構文で作成されるオブジェクトを proc から lambda proc という表現に変更しています。

[d2cfb5228a] Koichi Sasada 2020-12-01 02:10:19 UTC

GCデバッグ出力用に使われる rb_raw_obj_info() で T_STRING 型オブジェクトに shared フラグの有無を表示するようにしています。

[8247b8edde] Koichi Sasada 2020-12-01 02:14:36 UTC

Ractor 間でのオブジェクトのコピー時に T_ARRAY 型オブジェクトに対して rb_ary_modify() を呼んでましたが rb_ary_modify_check() によるチェックが freeze されてる時に例外を発生させてしまうので rb_ary_modify_check() を取り除いた部分を rb_ary_cancel_sharing() という関数に分離してこちらを使うように修正しています。 https://github.com/ruby/ruby/pull/3817 [ruby-core:101087] [Bug #17343]

[182fb73c40] Koichi Sasada 2020-11-30 07:18:43 UTC

rb_ext_ractor_safe() という C API を追加して拡張ライブラリが定義するメソッドに ractor safe であることを宣言できるようにして、明示的に ractor safe と宣言されたメソッド以外は main Ractor 以外から呼ばれると例外が発生するようにしています。 [ruby-core:100720] [Feature #17307]

[1ca9facab6] Kazuhiro NISHIYAMA 2020-12-01 07:07:14 UTC

ext/.document に monitor/lib と monitor/monitor.c を追加して rdoc によるドキュメント生成の対象に追加しています。

[d5e16161f6] Nobuyoshi Nakada 2020-12-01 08:35:28 UTC

ext/.document にさらにドキュメント化対象のファイルやディレクトリを追加しています。

[764de7566f] Koichi Sasada 2020-12-01 07:34:59 UTC

8247b8eddeb2a504a5c9776d1f77d413c8146897 の追加修正。 Ractor 間のオブジェクトコピー時に T_STRING 型の時にも T_ARRAY と同様に rb_str_modify() は freeze されてた時に例外が発生してしまうので rb_str_make_independent() という関数を追加してこれでバッファが共有されてる時にコピーを作成するようにしています。 [ruby-core:101087] [Bug #17343]

[6ac5e3c06a] Hiroshi SHIBATA 2020-12-01 09:32:20 UTC

標準添付ライブラリ weakref の gemspec ファイルに delegate への依存関係を追加しています。

[0115ae5ffc] Hiroshi SHIBATA 2020-12-01 10:09:06 UTC

標準添付ライブラリ prime の gemspec ファイルに singleton と forwardable への依存関係を追加しています。

[ac29c405f6] Hiroshi SHIBATA 2020-12-01 10:14:07 UTC

標準添付ライブラリ time の gemspec ファイルに date への依存関係を追加しています。

[ad0c2232b1] Hiroshi SHIBATA 2020-12-01 10:14:36 UTC

標準添付ライブラリ open-uri の gemspec ファイルに uri、stringio、time への依存関係を追加しています。

[0c57438ccf] jacopo 2020-12-01 11:19:05 UTC

internal/fixnum.h のコメントの typo 修正。