ruby-trunk-changes 2020-09-21

今日はメモリ管理の効率についての不具合修正や Ractor の細かな修正、blocking fiber の Thread#join の対応などがありました。

[d5fa66156a] Quang-Minh Nguyen 2020-09-18 05:15:32 UTC

Ractor#inspect の出力に Ractor#status を含めるようにしています。

[398da71175] Quang-Minh Nguyen 2020-09-18 06:02:14 UTC

Ractor.new に渡した名前の Encoding が ASCII-incompatible だった場合に ArgumentError を発生させるようにしています。

[be2efb118f] Quang-Minh Nguyen 2020-09-20 06:17:18 UTC

bootstraptest/test_ractor.rb の Ractor の基本的なテストにテストケースを追加しています。

[b6d599d76e] Peter Zhu 2020-08-26 16:16:17 UTC

メモリ管理で未使用の heap を free(3) でシステムに返す heap_pages_free_unused_pages() で heap 解放後に全 heap 内のアドレスの最高の位置を保持する heap_pages_himem の更新をするようにしています。ポインタが Object かどうかの判定で最初のふるいに使うアドレス範囲のものですね。

[501fff14c7] Samuel Williams 2020-09-19 23:34:02 UTC

Thread#scheduler= で新たな Scheduler もしくは nil がセットされた時に元々設定されてた Scheduler の close メソッドを呼ぶようにしています。

[596173155a] git 2020-09-20 21:51:54 UTC

version.h の日付更新

[70f08f1eed] Samuel Williams 2020-09-20 21:54:08 UTC

blocking fiber で Thread#join の終了待ちで Fiber を切り替えできるように Scheduler 対応しています。またこのために Scheduler#block メソッドに省略可能な timeout 引数を追加して一定時間で待ちを解除する機能も追加しています。

[f7aa51b2b8] Samuel Williams 2020-09-21 01:36:34 UTC

NEWS に blocking fiber とそのための Thread#scheduler の追加についての項目を追記しています。 また doc/fiber.rdoc を削除してかわりに? doc/scheduler.md を追加して blocking fiber の使いかたについて記述しています。

[10d795cfca] Samuel Williams 2020-09-21 04:26:39 UTC

NEWS に Fiber#backtrace や Fiber#backtrace_locations について追記しています。 [ruby-core:98049] [Feature #16815]

ruby-trunk-changes 2020-09-20

今日は Thread に Scheduler が設定されていた時の Mutex の不具合修正などがありました。

[6987c8997e] Benoit Daloze 2020-09-20 11:29:24 UTC

Mutex のロック時に blocking fiber 用の Scheduler が Thread に設定されていた時に block メソッドを呼び出すのに rb_ensure() を利用して rb_mutex_t::waitq のリストからの削除を例外発生時にも確実に行なうようにしています。

[84c4c7bec8] git 2020-09-20 11:39:25 UTC

version.h の日付更新

ruby-trunk-changes 2020-09-19

今日は GC.compat と finalizer の組み合わせでの不具合修正や拡張ライブラリ io/wait の依存バージョンの 3.0 以降への変更などがありました。

[1a9dd31910] Aaron Patterson 2020-09-18 17:50:27 UTC

GC.compact 時に finalizer 用の登録テーブルに入ってるかどうかを考慮していたのを、かわりに GC の mark 時にこのテーブル内のオブジェクトを pin down するように変更しています。一部のタイプのオブジェクトはこれまでも移動不可になってましたが、finalizer 実行中にオブジェクトの参照を GC が関知しない linked list 内にコピーするので全て移動したらまずかったということみたいです。

[7d9b4d3c61] git 2020-09-18 19:32:21 UTC

version.h の日付更新

[555ea83344] aycabta 2020-09-18 19:25:59 UTC

標準添付ライブラリ irbe468d9f49ca34f713c030c623f655a40370e186d で導入された代入文の時に評価値を表示しないようにする設定 OMIT_ON_ASSIGNMENT はやっぱり削除して、オプション --omit-on-assignment も廃止してかわりにオプション --truncate-echo-on-assignment を追加しています。 ECHO_ON_ASSIGNMENT に :truncate を指定すると表示はするけど1行におさまらない長い値は省略表示するというものみたいです。

[e193dd1e3d] aycabta 2020-09-18 20:06:03 UTC

irb のバージョンを 1.2.7 に更新しています。

[6cb6d5abc3] Aaron Patterson 2020-09-19 00:04:59 UTC

MJIT の実行時コンパイルする worker が call cache の内容を取得するための mjit_capture_cc_entries() で call cache の内容が GC.compact で移動済みの T_MOVED になってたら異常終了するように assert(3) を追加しています。 不具合の調査のために一時的に追加しているとのこと。

[73a626c078] Nobuyoshi Nakada 2020-09-19 08:26:52 UTC

拡張ライブラリ io/wait の gemspec ファイルの spec.required_ruby_version を 3.0.0 以上に更新しています。 blocking fiber 関連の変更が入ったので 3.0 以降に依存しちゃったみたいですね。

ruby-trunk-changes 2020-09-18

今日は blocking fiber まわりの修正や Ractor 関連の修正などがありました。

[63a4f2f93f] Kazuhiro NISHIYAMA 2020-09-17 11:30:59 UTC

NEWS.md のチケット番号をリンクにするための footnote の順序をチケット番号順にソートしています。

[e4dbb91f4c] Kazuhiro NISHIYAMA 2020-09-17 11:34:59 UTC

doc/ChangeLog-1.9.3 やテストメソッドなどの overriden を overridden に修正。

[c3acfcc78d] Benoit Daloze 2020-09-17 10:55:17 UTC

test/fiber/scheduler.rb のちょっとしたリファクタリング

[738a089b3a] Benoit Daloze 2020-09-17 12:30:40 UTC

blocking fiber のための Scheduler クラス実装のための C API の関数名を改名しています。

[9472d16061] Benoit Daloze 2020-09-17 12:45:44 UTC

blocking fiber の対応。 rb_thread_sleep_deadly_allow_spurious_wakeup() で Scheduler クラスの kernel_sleep メソッドのかわりに block メソッドを呼ぶように変更しています。

[deffb63021] Benoit Daloze 2020-09-17 12:52:04 UTC

test/fiber/scheduler.rb にいくつかコメントを追加しています。

[264889ec3d] Benoit Daloze 2020-09-17 13:15:43 UTC

thread_sync.c の rb_mutex_unlock_th() で Thread に scheduler がない時の処理を else 節のなかに移動しています。異常終了の不具合修正のようです。

[d01954632d] Benoit Daloze 2020-09-17 15:26:52 UTC

264889ec3d3d38fc1fd23c4fb48402f1367a8deb の追加修正。 rb_mutex_unlock_th() で Thread に shceduler が設定されてた時に goto でロック取得待ちの Thread のループを抜けるようにしています。

[d9b943b8e5] Benoit Daloze 2020-09-17 15:29:43 UTC

thread_sync.c のコメントアウトされてたコードの削除。

[609e6ac0ca] git 2020-09-17 15:30:47 UTC

version.h の日付更新

[dd5db6f5fe] Koichi Sasada 2020-09-16 00:04:13 UTC

String オブジェクトの解放処理 rb_str_free() で fstring 管理用テーブルの操作をしているところでの Ractor 用の排他処理漏れを修正。

[b189dc6926] Koichi Sasada 2020-09-16 00:05:25 UTC

デバッグ出力用の rb_raw_obj_info() で T_SYMBOL 型オブジェクトに対応。

[b416a76402] Koichi Sasada 2020-09-16 00:06:08 UTC

Thread 起動時に Ractor のセットアップする vm_insert_ractor() に複数の Ractor が動作している場合のデバッグログを RUBY_DEBUG_LOG() で追加しています。

[06e9b94d40] Koichi Sasada 2020-09-16 00:11:16 UTC

rb_ractor_confirm_belonging() の条件分岐に UNLINKELY() を追加したり rp でデバッグ出力を追加したりしています。 rp って .gdbinit とかで定義してるコマンドじゃなかったっけ、と思ったら internal.h でマクロとして定義されていたオブジェクト内容をダンプするものですね。

[3b159374a2] Koichi Sasada 2020-09-16 00:15:10 UTC

ruby_global_symbols というグローバル変数で Symbol の ID と対応する文字列を管理しているものに Ractor からアクセスする時に排他処理するように修正しています。

[b5db9b8a31] aycabta 2020-08-04 06:46:39 UTC

標準添付ライブラリ rdoc でリンク先としてファイル名の指定も対応するようにしています。

[e23f0f29da] Nobuyoshi Nakada 2019-09-28 05:45:44 UTC

標準添付ライブラリ rdoc で --force-update オプションが指定されていた時に一部でも新しいファイルがあったら全ファイルを parse しなおすようにしています。cross reference の処理のために必要らしい。

[0d56aec1dd] Dorian Marié 2020-07-07 23:07:56 UTC

標準添付ライブラリ rdoc のコメントの typo 修正。

[305c430603] aycabta 2020-08-01 14:40:10 UTC

標準添付ライブラリ rdoc の gemspec の spec.files に man/ri.1 を追加しています。

[5bb5e706f1] Benoit Daloze 2020-09-18 08:39:27 UTC

thread_sync.c の sync_wakeup() で blocking fiber 対応のコードの Thread の schedule 設定有無チェック漏れを修正。

[af1926e859] Benoit Daloze 2020-09-18 09:11:47 UTC

5bb5e706f1d310a467075630145d2cc277045765 で追加した分岐の条件が反転していたのを修正しています。コミットログと言ってることが反対だなぁと思った。

[3d86f7a37c] Hiroshi SHIBATA 2020-09-18 09:44:46 UTC

tool/sync_default_gems.rb の erb 用の同期処理で upstream リポジトリ内のコマンドファイルのパスを exe から libexec に対応しています。

[6dd257ed1e] Hiroshi SHIBATA 2020-09-18 09:47:52 UTC

tool/sync_default_gems.rb に拡張ライブラリ bigdecimal の同期の処理を追加しています。

ruby-trunk-changes 2020-09-17

今日は ObjectSpace.define_finalizer で対象のオブジェクトへの参照が含まれてて GC されなくなるケースの一部への警告の追加などがありました。

[f75009c122] Samuel Williams 2020-09-16 03:21:16 UTC

io.c の rb_io_from_fd() を prep_io() を呼ぶようにリファクタリングしています。リファクタリングの他にも a9b2a96c5cfa5ab36c89ffae82e28eb733e36542 で rb_io_t::self の初期化漏れを修正した時に prep_io() でも修正したのをここでも適用するという意味もあるかも。

[8e173d8b27] Chris Seaton 2020-09-16 18:59:36 UTC

finalizer を設定した時のその finalizer に設定した Proc オブジェクトが対象のオブジェクトへの参照を含んでしまっていると GC されなくなってしまうので、ObjectSpace.define_finalizer でそのような場合を検出して警告を出すようにしています。なのですが判定内容をみると登録している Method の receiver が対象のオブジェクト自身というケースだけ検出してる? ような感じです。

[2e6c484040] git 2020-09-16 20:52:45 UTC

version.h の日付更新

[ce888bfa23] Benoit Daloze 2020-09-17 09:17:07 UTC

NEWS に Mutex が Fiber 単位で排他するようになったという変更を追記しています。 [ruby-core:97907] [Feature #16792]

[3f6c0a6d74] Benoit Daloze 2020-09-17 09:42:26 UTC

ruby/spec を upstream から更新しています。

ruby-trunk-changes 2020-09-16

今日は Complex.polar の不具合修正や deprecated だったメソッド URI.escape/URI.unescape の削除、frozen-string-literal: true でも式の埋め込みがあった文字列リテラルは freeze しないようにする仕様変更などがありました。

[3dd9e12b51] Ashwin Maroli 2020-09-10 17:58:35 UTC

標準添付ライブラリ fileutils の FileUtils#mkdir_p で引数のリストを先に map で変換してから each でループしていたのを単一のループにしてその中で変換するようにリファクタリング

[7f9f5f5723] Hiroshi SHIBATA 2020-05-28 12:11:12 UTC

標準添付ライブラリ securerandom のテストでエラーメッセージを作るのに message メソッドのかわりに build_message メソッド(tool/lib/test/unit に同梱している test/unit のヘルパー)を使うように変更しています。

[abbd324152] Jeremy Evans 2020-07-18 13:55:06 UTC

標準添付ライブラリ uriURI::Escape という Module の定義を削除してずっと deprecated だった URI.escape と URI.unescape をついに削除しています。おお、ついに。

[ee10efdcf0] Hiroshi SHIBATA 2020-09-15 12:44:59 UTC

7f9f5f5723cd723dee578b0681066c8393ee45d0 の securerandom のテストでの build_message 利用を revert しています。

[86087a1527] Aaron Patterson 2020-09-15 00:45:13 UTC

gc.c の gc_mark_stack_values() から呼び出す gc_mark() を gc_mark_and_pin() に変更して VM スタック上から参照されているオブジェクトは GC.compact で移動不可とするようにしています。

[a0d50465de] git 2020-09-15 16:09:49 UTC

version.h の日付更新

[fbba6bd4e3] Jean Boussier 2020-09-10 11:17:53 UTC

拡張ライブラリ objspace の ObjectSpace.dump_all を ruby 実装にして引数の処理をしてから拡張ライブラリ実装のメソッドに委譲するようにしています。 C 実装だと引数の処理のために Hash オブジェクトを生成してしまうのでそれが Objecpace.dump_all の結果にも入ってしまうのでそれを避けるためとのこと。うーむなるほど。 [ruby-core:99297] [Feature #17045]

[9b535f3ff7] Benoit Daloze 2020-08-31 19:24:36 UTC

magic comment frozen-string-literal: true が指定されていても式の埋め込みのある文字列リテラルは freeze しないように仕様変更しています。Matz 承認済みのようですね。 [ruby-core:99485] [Feature #17104]

[1af0319fc8] Benoit Daloze 2020-09-15 19:54:31 UTC

rubyspec のバージョンによる分岐や guard の 2.8 を 3.0 に変更しています。

[344304c89f] Hiroshi SHIBATA 2020-09-15 22:45:01 UTC

7f9f5f5723cd723dee578b0681066c8393ee45d0 の securerandom のテストでの build_message 利用のリトライ。 build_message メソッドの使いかたが間違ってたみたいです。 https://github.com/ruby/ruby/pull/3543

[889bbbaf52] Koichi Sasada 2020-09-16 06:44:26 UTC

9b535f3ff7c2f48e34dd44564df7adc723b81276 の magic comment frozen-string-literal の仕様変更の影響で RubyVM::InstructionSequence#to_binary が動かなくなっていたようで、VM 命令列へのコンパイルを実行する RubyVM::InstructionSequence.compile のコンパイルオプションのテストがデバッグ用のフックつきの時に失敗していたそうなので、環境変数RUBY_ISEQ_DUMP_DEBUG=to_binary が設定されていた時に skip するようにしています。

[9e813c1fc4] Benoit Daloze 2020-09-16 09:17:23 UTC

9b535f3ff7c2f48e34dd44564df7adc723b81276 の再修正。なんですが本体の修正ではなくて問題になってたテストの assertion を環境変数 RUBY_ISEQ_DUMP_DEBUG が定義されてたら実行しないという変更。うーんこれでいいのかな? RubyVM::InstructionSequence#to_binary がうまく動かないっていうことかと思ったのですが。

[10290da54d] Benoit Daloze 2020-09-16 09:36:39 UTC

blocking fiber のテストスクリプトにここで実装されている Scheduler はテストのための簡易版でパフォーマンスを考慮していない(IO.select メソッドを使っている)ので、production での利用には epoll()/kqueue() を使った拡張ライブラリ実装が必要というコメントを追加しています。うーんそうなのか。

[68b5f14d53] Kenta Murata 2020-09-16 10:27:16 UTC

Complex.polar の引数に Complex を渡した時に assert() にひっかかっていたのを修正しています。実数部のみ取り出す処理を追加しています。 https://github.com/ruby/ruby/pull/3551 [ruby-core:100020] [Bug #17172]

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 で閉じられるみたいなのでそれを避けるためのようです。