ruby-trunk-changes 2021-01-11

今日は標準添付ライブラリ matrix の Matrix#** の引数(右辺)に 0 を渡した時の仕様変更や MJIT での不具合修正などがありました。

[1e827d4cb5] Nobuyoshi Nakada 2021-01-10 11:42:01 UTC

bundled gems の更新チェックする GitHub workflow .github/workflows/bundled_gems.yml を削除しています。この workflow は GitHub Actions 実行専用のリポジトリに移動するそうです。

[c63552eab1] Nobuyoshi Nakada 2021-01-10 12:29:07 UTC

random.c の fill_random_seed() で変数 n の型を rb_atomic_t に変更して複数の thread から呼ばれた時に同じ seed を使ってしまうのを避けるようにしています。

[480f436dac] Nobuyoshi Nakada 2021-01-10 15:33:26 UTC

テスト中に定数を定義するもので繰り返しテスト実行した時の警告抑制のため Module#remove_const で定数を消しておく処理を ensure 節に入れて例外発生時なども削除できるようにしています。

[52257640ac] git 2021-01-10 15:47:34 UTC

version.h の日付更新

[0e015f9389] Burdette Lamar 2021-01-10 20:13:24 UTC

Hash クラスの rdoc 用コメントに Hash のメソッドリストを追加しています。 https://github.com/ruby/ruby/pull/4045

[8187228de0] Tom Chen 2021-01-10 20:39:37 UTC

Ractor クラスの rdoc 用コメントの文法修正など。 https://github.com/ruby/ruby/pull/4048

[d8c8b79d24] Marc-André Lafortune 2021-01-10 21:21:10 UTC

標準添付ライブラリ matrix で Matrix#** の引数に 0 を渡すとエラーになっていましたが、正方行列であれば同じサイズの単位行列にするように変更しています n**0 = 1 となることとの対応をつけるためみたいです。 https://github.com/ruby/ruby/pull/4047 [ruby-core:101986] [Bug #17521]

[f6e2c41db3] Nobuyoshi Nakada 2021-01-11 02:14:28 UTC

拡張ライブラリ etc の static 変数 passwd_blocking の更新を RUBY_ATOMIC_EXCHANGE() を利用するようにして MT-safe にしています。

[d2aaf865e3] Nobuyoshi Nakada 2021-01-11 02:31:52 UTC

拡張ライブラリ etc で古い ruby 用? に RUBY_ATOMIC_EXCHANGE() の定義がなかったら代替実装を定義するようにしています。

[5e00eeb4d4] Nobuyoshi Nakada 2021-01-11 05:00:35 UTC

d8c8b79d24bf0f3177535501ad9b801e552fb2ad の再修正。 Matrix#** の仕様変更に追随して rubyspec のバージョン指定を終端を含む ".." で 3.0.0 までと指定していましたが、終端を含まない "..." で 3.0.1 までと変更しています。意味は同じ? [ruby-core:101986] [Bug #17521]

[2a1c68c91e] Takashi Kokubun 2021-01-11 07:40:37 UTC

tool/ruby_vm/views/mjit_compile.inc.erb で MJIT によるコード生成時に leave 命令および opt_invokebuiltin_delegate_leave 命令の処理で割り込みを検出した場合に goto cancel していたのをやめその場で rb_threadptr_execute_interrupts() を呼び出して割り込み処理して VM control frame の pop を続けるようにしています。 cancel で通常の vm_exec() に fallback するのは leave 命令の時はよいけど opt_invokebuiltin_delegate_leave 命令の場合は builtin 関数の呼び出しからの return の処理でこの場合重複して builtin 関数が呼び出されてしまうことになるのでまずいとのこと。ふーむ、なんで leave では大丈夫だったのかな。