ruby-trunk-changes 2023-05-28

今日は標準添付ライブラリ reline でダイアログ表示の高さを端末の行数から計算するようにする変更やその irb でのドヒュメント表示ダイアログでの対応、各種拡張ライブラリで IO オブジェクトから file descriptor を得るのに rb_io_descriptor() という C API を利用するようにする変更などがありました。

[5d137a7f77] tomoya ishida 2023-05-27 14:48:45 UTC

標準添付ライブラリ reline のダイアログ表示の時の行数の指定を固定の15から端末の表示行数から算出するようにしています。 https://github.com/ruby/reline/pull/542

[cf0b9e0db0] tomoya ishida 2023-05-27 15:07:25 UTC

標準添付ライブラリ reline のダイアログの再描画処理でスクロール処理の必要性をチェックする分岐が 1つずれていたのを修正しています。

[00d6674636] Samuel Williams 2023-05-28 05:08:25 UTC

拡張ライブラリ etc で IO オブジェクトから file descriptor を得るのに rb_io_descriptor() という C API を利用する(未定義の時には代替実装を用意)ように変更しています。全体的な流れとして rb_io_t の構造体を遮蔽しようという変更の予定があってその準備みたいです。 https://github.com/ruby/etc/pull/26

[881757c03f] Samuel Williams 2023-05-28 05:08:46 UTC

同じく拡張ライブラリ io/wait でも fd を得るのに rb_io_descriptor() を利用するように変更しています。 https://github.com/ruby/io-wait/pull/25

[26dd9c5f0f] Samuel Williams 2023-05-28 07:49:15 UTC

拡張ライブラリ io/nonblock でも IO オブジェクトから fd を取得するのに C API rb_io_descriptor() を利用するように変更しています。

[55393645a1] Samuel Williams 2023-05-28 08:01:40 UTC

26dd9c5f0f8d17151ef721b46f94af0e6b3f484a の拡張ライブラリ io/nonblock の変更を revert しています。うっかり Gemfile.lock を追加してしまっていたのと、次のコミットで再度変更していますが C のソースコードも関数の引数名を不要に改名していたのでそれをやめるためみたいです。

[14abb799c9] Samuel Williams 2023-05-28 08:40:33 UTC

26dd9c5f0f8d17151ef721b46f94af0e6b3f484a のリトライで拡張ライブラリ io/nonblock で IO オブジェクトから fd を得るのに C API の rb_io_descriptor() を利用するように変更しています。

[d5ef373b11] tomoya ishida 2023-05-28 09:20:13 UTC

標準添付ライブラリ irb で reline のダイアログ表示の行数(高さ)の計算結果が利用できるなら rdoc のドキュメント表示ダイアログで利用するようにしています。

ruby-trunk-changes 2023-05-27

今日は主にドキュメントの修正や IO::Buffer の実装のリファクタリングなどがありました。

[6d450d62fb] Jun Aruga 2023-05-25 15:57:52 UTC

doc/contributing/testing_ruby.md で make test-all で TESTS 変数に渡すオプションのサンプルを修正しています。また TESTS=--help を指定してヘルプメッセージを表示する例も追加しています。

[d62ae18797] Burdette Lamar 2023-05-26 13:20:18 UTC

Enumerable モジュールの rdoc 用コメントのクロスリファレンスの文言を修正しています。 https://github.com/ruby/ruby/pull/7862

[4847b7ac28] Peter Zhu 2023-05-26 13:24:23 UTC

Hash オブジェクトが Variable Width Allocation に対応した結果 transient heap は使わなくなったので transient_heap.c の rb_transient_heap_alloc() 内で渡されたオブジェクトの型をチェックしている TH_ASSERT() から T_HASH 型は削っています。

[618a04d211] Jeremy Evans 2023-05-26 14:58:40 UTC

doc/syntax/control_expressions.rdoc に Kernel#throw と Kernel#catch についてのセクションを追加しています。これらは Kernel のメソッドだけどほぼ構文みたいなものなのでとのこと。確かにほぼ予約語みたいな気持ちになりますね。

[54b7ce0bff] Masafumi Koba 2023-05-26 15:21:23 UTC

標準添付ライブラリ rdoc の HTML 化したドキュメントのための CSS ファイルのレイアウトの変更。

[94e5ecbbdd] Masafumi Koba 2023-05-26 13:52:12 UTC

標準添付ライブラリ rdoc の HTML 化したドキュメントのための CSS で要素の指定のための記法で summary タグの指定の前に ">" を追加しています。またメニュー? を開くためのトグルボタンの三角形のフォントサイズを調節しています。

[c6e4337a99] Nobuyoshi Nakada 2023-05-26 17:07:47 UTC

rdoc によるドキュメント化対象のファイルを指定する .document から win32 ディレクトリを削除しています。

[c37ebfe08f] Peter Zhu 2023-05-26 17:34:26 UTC

string.c で未使用になっていたマクロ STR_DEC_LEN() を削除しています。

[bf1bc5362e] Samuel Williams 2023-05-27 09:48:47 UTC

IO の実装で pread()/pwrite() が未実装の時のための preprocessor 分岐を消しています。また IO::Buffer の pread/pwrite の実装で offset を考慮するタイミングを変更しているようです。たぶん可読性のための変更かな。 https://github.com/ruby/ruby/pull/7860

ruby-trunk-changes 2023-05-26

今日は主に RGenGC のパフォーマンス改善のために young のオブジェクトを old に promote するのを遅らせる変更や non-blocking Fiber や IO まわりのビジーループ回避の修正などがありました。

[e87f6c899e] Peter Zhu 2023-05-18 13:20:56 UTC

RGenGC で旧世代(old)のオブジェクトから参照されている WB-protected なオブジェクトを mark 時に即座に old に昇格させずに、何度か minor GC を生き残った時にはじめて昇格させるようにしているようです。 Shopify のアプリでパフォーマンスの改善がみられたとのこと。 struct heap_page のメンバーに remembered_bits を追加して marking_bits とは別に old からの参照があった時のフラグを管理してこちらを promote 時に利用するようにしているようです。がどこで promote するまでの回数を制御しているんだろう? https://github.com/ruby/ruby/pull/7821 [ruby-core:113513] [Feature #19678]

[d83f32c34b] Sutou Kouhei 2022-09-13 00:57:42 UTC

rubygems で gem install で rubygems 自体の plugin をインストールした時にその場ですぐロードして続くサブコマンドの処理ですぐにその plugin の機能が有効になるようにしているようです。

[3dae55ea2f] "dependabot[bot]" 2023-05-26 02:59:29 UTC

GitHub Actions の workflow で利用している github/codeql-action アクションのバージョンを更新しています。

[8e1abef469] KJ Tsanaktsidis 2023-05-18 23:12:10 UTC

non-blocking Fiber で利用する Scheduler の利用時にビジーループに陥る場合がある不具合を修正しています。とても長いコミットログを読むと FreeBSD で特有な現象だったみたいです。 https://github.com/ruby/ruby/pull/7864 [ruby-core:113520] [Bug #19680]

[8c4da473de] KJ Tsanaktsidis 2023-05-26 02:11:42 UTC

子プロセスを Process.wait で待っている時の例外処理のテストで FreeBSD でのみタイムアウトを延ばしていたのをやめています。8e1abef46951c56ea4c9d164d33be5858e1e758d の修正で不要になったということかな。

[54a74c4203] KJ Tsanaktsidis 2023-05-26 02:02:30 UTC

構造体 struct rb_thread_cond_struct の宣言を thread_win32.h からプラットフォーム非依存の include/ruby/thread_native.h に移動しています。

[66871c5a06] KJ Tsanaktsidis 2023-05-21 12:29:16 UTC

IO#close などで file descriptor を close(2) しようとした時にその fd が別の Thread で利用中の場合にそれを待つという機構がビジーループになる可能性があった不具合を修正しているようです。これも主に FreeBSD でみられる現象だったようです。なんかこれ性能のためにわざと conditional variable を使わなかったんだったような気もちょっとしますがどうだったかな。 svn 時代の r57224 のあたりの変更だと思いますが。 https://github.com/ruby/ruby/pull/7865 [ruby-core:113520] [Bug #19680]

[d1628feaaf] KJ Tsanaktsidis 2023-05-26 02:10:45 UTC

IO の gets と close を競合させるテストでのタイムアウト値を短くしています。 66871c5a06d723f8350935ced1e88d8cc929d809 の修正により早く終わるようになったため。

[cc698c6cc2] git 2023-05-26 05:51:35 UTC

thread.c のインデントのタブを空白に展開しています。

ruby-trunk-changes 2023-05-25

今日は主に標準添付ライブラリ csv の更新や Fiber のマシンスタック用のメモリ領域の管理方法をチューニングするための変更や RGenGC のチューニングのための環境変数の導入などがありました。

[5f65e8c5d5] yui-knk 2023-05-24 08:24:41 UTC

98637d421dbe8bcf86cc2effae5e26bb96a6a4daruby_node_name() という関数の定義を node.c に移動するとともに rb_node_name() と改名していましたが元の ruby_node_name() に戻しています。公開関数なのでルールに従って rb_ の prefix にしたけど互換性のためにとのこと。

[85b4cd7cf8] Jean Boussier 2023-05-24 13:14:46 UTC

gc.c の is_markable_object() および is_swept_object() で未使用の rb_objspace_t 型の引数の警告抑制のため引数を削除しています。 https://github.com/ruby/ruby/pull/7853

[6d976eb534] Samuel Williams 2023-05-24 13:45:34 UTC

Windows 環境での read()/write()/pread()/pwrite() の代替実装の関数名を整理しているようにみえますが、コミットログをみると blocking region まわりの修正らしい。差分だけみるとよくわからないのですが。 https://github.com/ruby/ruby/pull/7848

[a23ae56c4d] Peter Zhu 2023-04-03 17:43:31 UTC

RGenGC の uncollectible_wb_unprotected_objects_limit というパラメーターを環境変数 RUBY_GC_HEAP_REMEMBERED_WB_UNPROTECTED_OBJECTS_LIMIT_RATIO で指定できるようにしています。 Major GC の頻度を減らすことでパフォーマンス改善するようなチューニングをできるようにするためのようです。 [ruby-core:113088] [Feature #19571]

[347afd39a3] Burdette Lamar 2020-08-18 00:37:22 UTC

標準添付ライブラリ csv の rdoc 用コメントから文字列を期待したところに文字列に変換できないオブジェクトが渡された時の例外の記述を削除しています。 https://github.com/ruby/csv/pull/166

[81c57ae7ac] Burdette Lamar 2020-10-29 01:12:11 UTC

標準添付ライブラリ csv のドキュメントに少し追記しています。 https://github.com/ruby/csv/pull/190

[55a900d9cc] Sampat Badhe 2022-01-30 21:25:38 UTC

標準添付ライブラリ csv のドキュメントの typo 修正。

[a0709d0aae] Mau Magnaguagno 2022-06-18 13:32:35 UTC

標準添付ライブラリ csv で古い ruby のサポートのためのファイルが不要なっていたものを削除しています。 https://github.com/ruby/csv/pull/250

[73c56e06c4] Sutou Kouhei 2022-09-03 13:01:59 UTC

標準添付ライブラリ csvCSV#read で最初に CSV#to_a で配列に変換していたのを parser_enumerator で Enumerator を生成して要素を順に取り出すループを改めて書くようにしています。 最適化のためかなと思ったら CSV#shift などで行を読んだ時にそれを無視して再度先頭から読んでしまうのを避けるためみたいです。 https://github.com/ruby/csv/pull/258

[88876f02c1] Sutou Kouhei 2022-09-07 21:19:05 UTC

と、思ったら 73c56e06c429ca713d3b612437d2087314a1062f は revert されています。 to_a を使っても読み込み状態は保持されてたみたいです。 https://github.com/ruby/csv/pull/260

[e151a2ff8e] Yuki Tsujimoto 2023-03-13 20:40:13 UTC

標準添付ライブラリ csv のドキュメントのサンプルの出力例を修正しています。 https://github.com/ruby/csv/pull/276

[38ef537ce0] Luke Gruber 2023-04-03 21:31:49 UTC

標準添付ライブラリ csv のテスト用のヘルパーモジュールの Helper を CSVHelper と改名しています。

[31b28b31fa] Nobuyoshi Nakada 2023-05-24 06:20:59 UTC

標準添付ライブラリ csv のテストで利用するパースエラー時のための assertion メソッド assert_parse_errors_out で YJIT と RJIT/MJIT が有効な時にタイムアウト値を調整するようにしています。

[492e0025fd] Samuel Williams 2023-05-25 02:17:49 UTC

cont.c でマシンスタック領域のメモリの処理を madvise(2) で示唆する時に advice 引数を呼び元で固定にしていたのを環境変数 RUBY_SHARED_FIBER_POOL_FREE_STACKS の指定で制御するようにしています。 commit や pull request だけではよくわかりませんがチケットのほうをみると advice に MADV_FREE を利用すると free などのメモリ使用量の統計情報が不正確になるのでやめたほうがいいという話があって、ひとまず Fiber の stack まわりで madvise(2) に指定するのをやめてみることができるようにしているってことかな? https://github.com/ruby/ruby/pull/7855 [ruby-core:110708] [Misc #19122]

[99a078f4ed] "dependabot[bot]" 2023-05-25 02:59:25 UTC

GitHub Actions の workflow で利用している necojackarc/auto-request-review アクションのバージョンを更新しています。

[d1237bc3a4] Hiroshi SHIBATA 2023-05-25 06:47:48 UTC

delegate、getoptlong、observer、ostruct、pstore、singleton、timeout、weakref などの標準添付ライブラリの gemspec ファイルをそれぞれの lib/xxx/ のディレクトリ配下から lib/ 直下に移動しています。

[8e2fac7b9c] git 2023-05-25 06:59:46 UTC

gems/bundled_gems の test-unit のバージョンを 3.5.9 に更新しています。また NEWS の bundled gems のバージョンリストも更新しています。

[5bfb317a93] Hiroshi SHIBATA 2023-05-25 06:58:09 UTC

標準添付ライブラリ benchmark の gemspec ファイルで version.rb を require していたのをやめてファイルを文字列処理して切り出すように変更しています。

[5ade6be777] Hiroshi SHIBATA 2023-05-25 07:09:29 UTC

5bfb317a938e461a9f99fe209765263cfe23b4d5 の続きで標準添付ライブラリ benchmark の gemspec ファイルも lib/benchmark/ 配下から lib/ 直下に移動しています。

[3026a2f4e9] Hiroshi SHIBATA 2023-05-25 09:11:11 UTC

拡張ライブラリ nkf の gemspec ファイルに spec.extensions の設定を追加しています。

[e5bce57e1d] Hiroshi SHIBATA 2023-05-25 09:11:17 UTC

拡張ライブラリ nkf のバージョンを 0.1.3 に更新しています。

[57fce84c14] git 2023-05-25 09:12:20 UTC

e5bce57e1d3ab6eb8c218355e9b31f に追随して NEWS の default gems のバージョンリストの nkf のバージョンも更新しています。

ruby-trunk-changes 2023-05-24

今日は Hash.new のキーワード引数が渡されると deprecated 警告を出すようにする変更や最近の変更で Hash#replace が異常終了する可能性があった不具合の修正などがありました。

[31ac8efca8] Jean byroot Boussier 2023-05-23 13:51:28 UTC

Hash.new に Hash オブジェクトとしてでなくキーワード引数を渡して呼び出した時に警告を出力するようにしています。チケットをみると同期としては Hash の作成時にあらかじめ要素数の指定をして内部的なテーブルやバッファを確保した状態で(あるいは Variable Width Allocation で適した slot サイズの heap を使うように)指定したいけど、そのためには現在 Hash.new(a: 42) と書くと Hash.new({a: 42}) 相当として扱われているためにキーワード引数が渡せないという問題があるので、まずこれを禁止したいということみたいです。キーワード引数分離が Hash.new では互換性のために Hash として扱う挙動が残ってたわけですね。なるほどなぁ。 https://github.com/ruby/ruby/pull/7828 [ruby-core:111306] [Feature #19236]

[24a6609ccb] Peter Zhu 2023-05-23 15:11:05 UTC

hash.c の ar_copy() 内の不要な分岐を削除。

[92d6c9a7b1] TSUYUSATO Kitsune 2023-05-23 16:16:32 UTC

irb の組み込みコマンド show_source で private なメソッドにも対応するようにしています。 https://github.com/ruby/irb/pull/577

[e854b050cc] Jenny Shen 2023-05-16 18:26:03 UTC

rubygems の config ファイル(YAML)の処理でキーの URL を特別扱いする処理で余分な空白が含まれてチェックがうまく働いてなかったのを修正しています。

[061e01ee50] Jenny Shen 2023-05-16 18:27:35 UTC

rubygems の config ファイルの処理のキーの URL 処理で末尾の "/" を無視するようにしています。

[a86f798fc2] Peter Zhu 2023-05-23 17:45:44 UTC

Hash#replace で内部実装が ar (配列による実装)の Hash で st_table による Hash を上書きしようとした時に異常終了するようになってしまっていたので修正しています。おそらく 5199f2aaf9527c97e6ec371e19748d0c2ac7a70e0938964ba1af3924cf969fb809fc3598892bc20d のあたりで Hash の Variable Width Allocation 対応のために ar_table/st_table の実装の変更をした影響で要素数が多い Hash でも ar_table 実装になるケースが出てきて従来は想定していなかった st_table -> ar_table という replace のパターンが生じていたのに対応してなかったということだと思われます。

[9592bc7039] Peter Zhu 2023-05-23 18:11:54 UTC

a86f798fc2e979ea83ec55744f906b2a816c8681 の影響?で rb_hash_replace() で不要になった分岐を削除しています。

[28056a6d16] Samuel Williams 2023-05-24 00:15:20 UTC

win32/win32.c に Windows 環境でも pread(3)/pwrite(3) の代替実装を提供するようにしています。 https://github.com/ruby/ruby/pull/7827

[12dfd9d1c9] Ufuk Kayserilioglu 2021-10-25 12:48:18 UTC

拡張ライブラリ json で String クラスを拡張するためのモジュール? JSON::EXT::Generator::GeneratorMethods::String の included メソッドの実装で super を呼ぶようにしています。

[135a0d26a1] Samuel Williams 2023-05-24 01:17:35 UTC

IO::Buffer クラスの read/write/pread/pwrite メソッドで割り込みによって指定のサイズまで読み書きできなかった時のためのループを追加して、そのかわり GVL を解放して blocking region を作るようにしています。 pull request からリンクされている async の issue をみると不具合の修正も含んでいるみたいですね。 https://github.com/ruby/ruby/pull/7826

[6406ae6931] "dependabot[bot]" 2023-05-24 02:59:33 UTC

GitHub Actions の workflow で利用している dependabot/fetch-metadata アクションのバージョンを更新しています。

[a692122fcd] "dependabot[bot]" 2023-05-24 02:59:36 UTC

GitHub Actions の workflow で利用している necojackarc/auto-request-review アクションのバージョンを更新しています。

[1ea9bb8496] Nobuyoshi Nakada 2023-05-24 05:26:56 UTC

標準添付ライブラリ racc のテストファイルで末尾の改行がないものがあったので追加しています。

[d8da563f9e] Nobuyoshi Nakada 2023-05-24 06:04:07 UTC

rubyspec および YJIT の実装でもファイル末尾の改行がないものがあったので追加しています。

ruby-trunk-changes 2023-05-23

今日は主に標準添付ライブラリ syntax_suggest の不具合修正を含むバージョン更新などがありました。

[b0a25c9cf8] Jun Aruga 2023-05-22 12:53:05 UTC

bbbec4b87c1e66909f5bee9acd3e460b8c1ad663 で Thread::Queue のテストのタイムアウトの秒数に EnvUtil.apply_timeout_scale で環境変数によるスケーリングをかけていたのが assert_normal_exit が中で行うのと重複していたのでとのこと。 https://github.com/ruby/ruby/pull/7838

[3bd98e7a91] Noah Gibbs 2023-05-22 13:48:32 UTC

doc/yjit/yjit.md に YJIT の --yjit-stats オプションを有効にしてビルドする方法や stats の出力される項目の説明の追加などを行なっています。

[ed7c7657ae] yui-knk 2023-05-22 11:41:59 UTC

vm_eval.c の rb_parser_warn_location() 関数の prototype 宣言を削除しています。

[f890345c03] Charles Oliver Nutter 2023-05-19 14:11:43 UTC

Thread::Queue のテストのために Thread を起動するタイミングにより JRuby ではテスト失敗することがあるそうで、同期を取るために sleep していたのを Thread::Mutex を使って同期を取るようにしています。

[b8bf0a5272] schneems 2023-05-03 18:48:18 UTC

標準添付ライブラリ syntax_suggest のコード探索のタイムアウト時のメッセージで DEBUG=1 を指定することを示唆していたのを SYNTAX_SUGGEST_DEBUG=1 を指定するように変更しています。

[aaf815c626] schneems 2023-04-14 18:46:28 UTC

標準添付ライブラリ syntax_suggest のリファクタリングと最適化を施しているようです。

[c638ffa700] schneems 2023-04-21 22:34:16 UTC

標準添付ライブラリ syntax_suggest で end の閉じ忘れに対して期待と異なる suggest をする不具合の修正をしているようです。 https://github.com/ruby/syntax_suggest/issues/187

[a7d7032100] Hiroshi SHIBATA 2023-05-23 01:05:27 UTC

標準添付ライブラリ syntax_suggest の 1.1.0 を upstream からマージしています。

[52be7e8986] git 2023-05-23 01:24:57 UTC

a7d70321005d302d9b5aaa2b83569aa899a5aaa9 に対応して NEWS の default gems のバージョンリストの syntax_suggest のバージョンも更新しています。

[ef3aa22738] "dependabot[bot]" 2023-05-23 02:59:51 UTC

GitHub Actions の workflow で利用している dependabot/fetch-metadata アクションのバージョンを更新しています。

[98637d421d] yui-knk 2023-05-22 12:55:49 UTC

ruby_node_name() という関数の定義を iseq.c から node.c に移動して関数名を rb_node_name() に改名しています。

ruby-trunk-changes 2023-05-22

今日は主に IO::Buffer の実装で共有している文字列を破壊的に変更してしまう場合のある不具合の修正などがありました。

[7f7a8fa555] Nobuyoshi Nakada 2023-05-21 14:00:27 UTC

inline 関数 rb_fork() の定義を internal/process.h から process.c に移動しています。

[872249e209] Samuel Williams 2023-05-21 23:49:33 UTC

Thread::Queue のテストで Thread 間の通信のための pipe が leak していたので修正しています。 https://github.com/ruby/ruby/pull/7820

[a5819b5b25] TSUYUSATO Kitsune 2023-05-22 02:27:34 UTC

正規表現のマッチ時のメモ化の最適化をザポートする対象を少し広げるようにしているようです。 https://github.com/ruby/ruby/pull/7804

[bcb16eb1e5] Samuel Williams 2023-05-22 03:27:20 UTC

IO::Buffer の実装の引数や変数名で data としていたところを buffer とデータの内容がわかりやすいように改名しています。 https://github.com/ruby/ruby/pull/7836

[8fef1373be] "dependabot[bot]" 2023-05-22 03:01:36 UTC

GitHub Actions の workflow で利用している ruby/setup-ruby アクションのバージョンを更新しています。

[bd786e7896] Samuel Williams 2023-05-22 03:58:17 UTC

IO::Buffer の新規作成する io_buffer_for_make_instance() という関数の引数に flags を追加して、呼び元から RB_IO_BUFFER_READONLY を明示的に指定できるようにしています。また RB_IO_BUFFER_READONLY フラグがない時に rb_str_modify() を呼んで文字列オブジェクトを複製するようにしています。共有文字列を実体として持つ IO::Buffer が元の文字列を破壊的に変更してしまう不具合の修正のようです。 https://github.com/ruby/ruby/pull/7837 [ruby-core:110514] [Bug #19084]