ruby-trunk-changes 2020-09-15

今日は標準添付ライブラリ ostruct の freeze 対応の修正やメソッド名の上書き対応、Ractor の不具合修正などがありました。

[f7ccb8dd88] Koichi Sasada 2020-09-14 01:30:22 UTC

Ractor.select に signal で割り込まれた時に処理を続行するようにしています。

[74ddac1c82] Koichi Sasada 2020-09-11 09:30:27 UTC

vm_sync.h から vm_core.h および ractor_pub.h の #include を削除して VM_ASSERT() のかわりに RUBY_ASSERT() を使うようにしています。

[e81d7189a0] Koichi Sasada 2020-09-11 09:31:15 UTC

fstring のテーブルに文字列を登録する register_fstring() で RB_VM_LOCK_ENTER()/RB_VM_LOCK_LEAVE() でロックしておくようにしています。Ractor を使ってた場合の不具合修正のようです。

[1cabb216c6] git 2020-09-14 15:05:28 UTC

version.h の日付更新

[e026e186f4] Marc-Andre Lafortune 2020-09-08 19:08:50 UTC

標準添付ライブラリ ostruct で freeze に対応してメソッドの遅延定義できるようにしていた過去の変更を revert しています。おそらくここからの一連の変更は Ractor で遅延定義が Class の変更になってうまく動作しないのでその対応をしようとしての変更かと思われます。 [ruby-core:74094] [Bug #12136]

[5e7ec05319] Marc-Andre Lafortune 2020-09-08 19:51:27 UTC

標準添付ライブラリ ostruct のテストに未定義の属性名でアクセスするテストを追加しています。

[ebb8de7302] Marc-Andre Lafortune 2020-09-08 20:13:15 UTC

標準添付ライブラリ ostruct で OpenStruct#freeze メソッドを再度追加しています。@table も freeze して内容を変更しようとしたら FrozenError が自然に発生するようにして modifiable? というメソッドは不要になったので削除しています。

[8eefa8f373] Marc-Andre Lafortune 2020-09-08 20:30:02 UTC

標準添付ライブラリ ostruct の OpenStruct で class や method メソッドといった組み込みで存在するメソッドに依存しないようにしてこういった名前の属性を使えるようにしています。

[12a13eef49] Marc-Andre Lafortune 2020-09-08 21:13:03 UTC

標準添付ライブラリ ostruct の rdoc 用コメントで OpenStruct#[] メソッドでもアクセスできることをちょっと追記しています。

[12a2e32d43] Marc-Andre Lafortune 2020-09-08 21:13:29 UTC

標準添付ライブラリ ostruct の rdoc 用コメントに組み込みのメソッドを上書きできることについての注意書きを追記しています。また xxx! のように最後に "!" をつけたメソッド名で alias を作っておいてオリジナルのメソッドを呼べるようにしています。元のメソッドに "!" や "?" がついてたらどうなるんだろ……。is_a? とか実際に存在するけど。

[867f0c6793] Marc-Andre Lafortune 2018-10-05 20:41:57 UTC

標準添付ライブラリ rdoc で require のかわりに require_relative を利用するようにしています。

[28e60b0045] Marc-Andre Lafortune 2020-09-14 17:29:31 UTC

標準添付ライブラリ ostruct の 5e7ec0531987bfff65f65db9d491c272abb4add1, ebb8de730269a8c18a553e3dea7a7603b13d2328, 8eefa8f3736cd5dbf7256f571b368198102f11cc 12a13eef49dd2d839f502a7d848b7d600e8b645a, 12a2e32d43256e37d36903c5fa5fabe556337d84 などの直近の変更を revert しています。やっぱり組み込みメソッドの上書きはだめだったようですね。

[39312cf4d6] Marc-Andre Lafortune 2019-04-03 19:22:18 UTC

拡張ライブラリ pathname の絶対パス相対パスか判定するのに Windows 環境でのドライブレター対応の有無により異なる正規表現を利用するようにリファクタリングしています。

[67e5f7a9e5] Marc-Andre Lafortune 2020-09-14 18:03:56 UTC

28e60b0045b5732bca11012d81a5223001faa6b2 で revert した標準添付ライブラリ ostruct の変更を再度入れています。

[606c009ce2] Marc-Andre Lafortune 2020-09-14 17:48:29 UTC

標準添付ライブラリ ostruct で OpenStruct#[]= を再定義された場合? に動作がおかしくなるので set_ostruct_member_value! という別名を作っておいて内部ではそれを使うようにしています。 json がそういうことをしてたようです。

[125605abd9] Marc-Andre Lafortune 2020-09-14 18:06:49 UTC

標準添付ライブラリ ostruct の OpenStruct#method_missing を private にしています。

[60f5d38482] Marc-Andre Lafortune 2020-09-14 19:15:28 UTC

標準添付ライブラリ ostruct の OpenStruct#initialize_dup と OpenStruct#initialize_clone も private メソッドにして、さらに initialize_clone で super を呼んでなかったので frozen? が true を返してなかったらしいのを修正しています。

[29b1ac613b] aycabta 2020-09-14 13:50:03 UTC

NEWS に標準添付ライブラリ irb と reline のバージョン更新について追記しています。

[f3754dfc2e] Kazuhiro NISHIYAMA 2020-09-15 05:03:22 UTC

error.c のコメントの typo 修正。

[b2b855f486] Kazuhiro NISHIYAMA 2020-09-15 05:03:41 UTC

error.c の exception_loader() で内部的なインスタンス変数を取得するのに rb_ivar_get() を使ってたのを rb_attr_get() に変更しています。未初期化インスタンス変数の警告が出るのを避けるため。

[a9b2a96c5c] Samuel Williams 2020-09-15 02:19:54 UTC

IO オブジェクト生成時の内部的な構造体 rb_io_t のメンバー self の初期化が漏れてたのを修正し、また GC の mark や GC.compact のための gc_update_object_references() でこのメンバーも mark や参照の移動対応するようにしています。

[026ba68c10] Samuel Williams 2020-09-15 06:50:42 UTC

rb_io_from_fd() で fd から IO オブジェクトを作る時に mode の FMODE_PREP ビットを落としてたのを逆に立てるようにしています。このビットが立ってると autoclose で閉じられるみたいなのでそれを避けるためのようです。