ruby-trunk-changes 2022-05-10

今日は主に Variable Width Allocation での heap の管理の潜在的な不具合修正と Variable Width Allocation でまとめて連続して確保する slot 数の上限を 5つまでに引き上げる変更などがありました。

[00e5e827b1] David Rodríguez 2022-05-08 19:22:59 UTC

bundler に古い rubygems サポートのために respond_to? でチェックして分岐していたコードなどをもう不要ということで削除しています。

[a41fbc2c95] Peter Zhu 2022-05-04 13:05:22 UTC

Variable Width Allocation で可能な slot のサイズを struct RVALUE 4つまでから 5つまでに拡張しています。いくつかのベンチマークの結果性能もメモリ消費量も良い結果が得られたみたいです。

[033e58cf2c] Peter Zhu 2022-05-04 13:50:48 UTC

gc.c の gc_sweep_page() で bitmap を管理するループのカウンタの上限を HEAP_PAGE_BITMAP_LIMIT にしてたのを page 内の slot 数から実際に必要な数を計算するようにしています。無駄な処理の回避かと思ったけど buffer overrun の可能性があったみたいです。

[b3f3cb0c38] Peter Zhu 2022-05-06 13:37:21 UTC

gc_sweep_start() で Variable Width Allocation 有効時にあるサイズの heap にひとつも page がない時に gc_sweep_finish_size_pool() を呼び出すパスを追加しています。 gc_sweep_finish_size_pool() を呼ばないと page 追加されないのでずっと page が作られなくなってしまうということみたいです。

[f7d480378a] Peter Zhu 2022-05-06 13:41:05 UTC

gc_sweep_finish_size_pool() で page 追加する条件になる空き slot 数の計算をその heap の全 slot の割合で計算しているところで heap_init_slots よりも小さくなってしまったら heap_init_slots に切り上げておくようにしています。Variable Width Allocation で大きなサイズの heap はあまり利用されず page 数が小さいまま GC が実施される可能性があるのでその時にうまく動かなくなる可能性があったようです。

[e28e9c63c6] Peter Zhu 2022-05-06 14:53:48 UTC

heap_extend_pages() でもその heap の slot 数が 0 (つまり page がひとつもない)時の対応を追加しています。やはり Variable Width Allocation で大きなサイズの heap が利用されないまま GC が開始された時の考慮漏れがあったようです。

[85479b34f7] Peter Zhu 2022-05-06 17:43:18 UTC

gc_sweep_finish_size_pool() で実際に heap_increment() を呼んで heap に page を追加していたのをやめています。 rb_size_pool_t::allocatable_pages に確保する page 数上限をセットするだけで実際に page を確保するのは必要な時まで遅延させるようにしています。

[40be4d4263] MSP-Greg 2021-12-25 18:12:21 UTC

拡張ライブラリ psych で String#gsub のかわりに極力 String#delete などを使って正規表現による置換を避けるようにしています。

[2999eb8846] git 2022-05-09 18:20:49 UTC

version.h の日付更新

[c7d2247e35] Nobuyoshi Nakada 2022-04-25 09:48:37 UTC

configure の --with-thread オプションに引数で pthread など利用するスレッド実装を明示的に指定するようにオプションの形式を変更しています。

[d0983af61c] Nobuyoshi Nakada 2022-05-10 01:15:27 UTC

cea34bd8082784051542131ddf8a353f5656ac88 で追加した IO::Buffer のビット演算のメソッド群のテストで assert_equal の result と expected の引数の順序が逆だったのを修正しています。

[a85cdb5a6e] Kaíque Kandy Koga 2022-05-10 04:07:16 UTC

033e58cf2c6829e14fa38e0a364911361090aa83 で追加した gc.c のコメントの重複してた単語を削除しています。

ruby-trunk-changes 2022-05-09

今日は blocking fiber 用の IO::Buffer クラスの IO::Buffer#for の仕様変更やビット演算をまとめて実施するメソッド群の追加、default gems/bundled gems のバージョンの更新などがありました。

[25eb63fa7f] Soutaro Matsumoto 2022-05-08 14:04:25 UTC

bundled gems の rbs のバージョンを 2.4.0 に更新しています。 https://github.com/ruby/ruby/pull/5894

[98e3fdb444] git 2022-05-08 14:05:55 UTC

NEWS の bundled gems のバージョンリストを更新しています。

[f7539d5758] Hiroshi SHIBATA 2022-05-08 22:10:45 UTC

標準添付ライブラリ getoptlong のサンプルコードの配置ディレクトリを examples/ から sample/ と他のサンプルとあわせるように移動しています。

[bb9b6afd0d] git 2022-05-08 22:14:11 UTC

version.h の日付更新

[e2c143abf4] Hiroshi SHIBATA 2022-05-08 22:22:13 UTC

f7539d5758ee5c83e6ec7792b100e830180896fd の標準添付ライブラリ getlongopt のサンプルコードの移動にあわせて rdoc 用コメントらのリンクの相対パスも修正しています。

[563f0d0a48] Hiroshi SHIBATA 2022-05-08 22:29:33 UTC

.gitignore に rubyspec_temp というディレクトリを追加しています。

[ef525b012a] Samuel Williams 2022-05-08 23:03:04 UTC

blocking fiber の Scheduler 実装のために導入した IO::Buffer の IO::Buffer#for でブロックつきの呼び出しを受付けるようにして、ブロックなしなら freeze した文字列オブジェクトを生成してそれを wrap し、ブロックつきの時は文字列オブジェクトの内容を破壊的に変更できる状態の IO::Buffer を yield するようにしています。 https://github.com/ruby/ruby/pull/5892

[dc9a13abee] Kazuhiro NISHIYAMA 2022-05-09 00:07:46 UTC

ef525b012a709077ea2797e8642fae0b61234063 で IO::Buffer の rdoc 用コメント内にソースコードの一部が誤って挿入されてたのを削っています。

[df0bcb3385] Yusuke Endoh 2022-05-09 01:20:25 UTC

blocking fiber のための Scheduler を使ったテストで autoload 用のファイルの load 後に $LOADED_FEATURES から削っておくように後始末追加しています。

[cea34bd808] Samuel Williams 2022-05-09 05:19:01 UTC

IO::Buffer に #dup, #clone(実装は dup と同じ), #&, #|, #^, #~@ などのビット演算のメソッド定義を追加しています。 https://github.com/ruby/ruby/pull/5893

[fbbe7ac7e3] Sutou Kouhei 2022-05-09 07:35:40 UTC

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

[546f6ce432] git 2022-05-09 07:36:53 UTC

NEWS の default gems のバージョン更新リストの stringio のバージョンも更新してます。

[30632efeaa] Sutou Kouhei 2022-05-09 07:47:06 UTC

拡張ライブラリ stringio のバージョンを 3.0.3 にさらに更新しています。

[99f490475f] git 2022-05-09 07:48:37 UTC

NEWS の default gems のバージョン更新リストの stringio のバージョンもさらに更新してます。

[a370eb5a63] Hiroshi SHIBATA 2022-05-09 09:02:23 UTC

拡張ライブラリ io/wait の gemspec ファイルでバージョンを 0.2.3 に更新しています。

[95bb7e0a25] git 2022-05-09 09:19:47 UTC

NEWS の default gems のバージョン更新リストの io-wait のバージョンも更新しています。

[ecf32dbfc0] Hiroshi SHIBATA 2022-05-09 09:20:08 UTC

標準添付ライブラリ net/http のバージョンを 0.2.2 に更新しています。

[0161dc3edc] git 2022-05-09 09:21:02 UTC

NEWS の default gems バージョン更新リストの net-http のバージョンも更新しています。

ruby-trunk-changes 2022-05-08

今日は autoload の排他処理の blocking fiber 対応のための再実装がありました。

[fd6cef79f5] Samuel Williams 2022-05-07 22:22:58 UTC

Module#autoload が Thread 間で同時にファイルを load しようとするのを防ぐために内部的に ccan の linked list を使って排他処理を実装していたのを Mutex クラスによるシンプルな排他処理に変更しています。 元の実装が blocking Fiber でうまく動作しなかったためとのこと。 autoload のための排他処理って歴代の実装で苦労していると思うのでこれですんなりうまくいくかなぁ。 https://github.com/ruby/ruby/pull/5788

[6fa7d010c8] git 2022-05-07 22:23:16 UTC

version.h の日付更新

ruby-trunk-changes 2022-05-07

今日は過去の ChangeLog の URL の修正だけでした。

[2a6f79364a] Kazuhiro NISHIYAMA 2022-05-07 09:30:56 UTC

doc/ChangeLog-1.9.3 と doc/ChangeLog-2.0.0 の GitHub へのリンクの URL の schema が http だったのを https に変更しています。

[679b6e43c7] git 2022-05-07 09:31:35 UTC

version.h の日付更新

ruby-trunk-changes 2022-05-06

今日は Module#prepend の潜在的GC で改修された領域を参照する可能性があった不具合の修正などがありました。

[ac75c710cc] Burdette Lamar 2022-05-05 14:01:12 UTC

Kernel#sprintf の rdoc 用コメントの内容を doc/format_specifications.rdoc へのリンクにおきかえています。また IO#printf の rdoc 用コメントからも doc/format_specifications.rdoc にリンクするようにしています。 https://github.com/ruby/ruby/pull/5886

[ae96ef9cfb] Burdette Lamar 2022-05-05 20:02:54 UTC

File の特異メソッドの rdoc 用コメントにサンプルを追記しています。 https://github.com/ruby/ruby/pull/5888

[4acafdf632] git 2022-05-05 20:03:10 UTC

version.h の日付更新

[7448afccb3] Alan Wu 2022-05-05 20:08:24 UTC

Module#prepend の実装で rb_subclass_entry_t の linked list を辿って include 処理してる途中で GC が走る可能性のある処理が行なわれるため一度 rb_objspace_garbage_object_p() でチェックした後で rb_subclass_entry_t の構造体のメモリ領域が解放されている可能性があるので、rb_subclass_entry_t::klass の内容を変数に格納しておいてそれを参照するようにしています。

[cae85c528c] Alan Wu 2022-05-05 20:30:56 UTC

4d8f76286beefbb8f7fba2479f6d0a0b4a47304c で rb_obj_is_kind_of() に T_ICLASS のための高速化を追加した時に T_ICLASS 型オブジェクトの mark 時に rb_classext_t::includer メンバーも mark するようにしておくべきだったので修正しています。

[7d6de74abe] nobuyo 2022-05-04 08:48:31 UTC

bundler の man page の更新。 bundle add サブコマンドに -r オプションの説明を追記しています。

[d79e0832a5] Dominik Bauernfeind 2022-05-04 09:16:05 UTC

bundler のコメントの typo 修正。

[67950a4c0a] Kazuhiro NISHIYAMA 2022-05-06 09:13:22 UTC

File.blockdev? の rdoc 用コメントのサンプルの閉じかっこの漏れを修正。

ruby-trunk-changes 2022-05-05

今日は標準添付ライブラリ logger のちょっとした最適化や misc/lldb_disasm.py の修正などがありました。

[bff31b3208] Peter Zhu 2022-05-04 13:24:03 UTC

gc.c の heap_page_allocate() から不要なキャストを削除。

[3a31b80bea] Jemma Issroff 2022-05-04 18:27:35 UTC

misc/lldb_disasm.py の insn_len というメソッドで参照すべき C の変数名が変化していたのに追随させています。

[d7df8c6964] Jemma Issroff 2022-05-04 18:33:05 UTC

gc.c の gc_sweep_page() で RGENGC_CHECK_MODE が真に定義されてビルドされている時の freelist のチェックの前後で ASAN のチェックを緩めるための unpoison を追加しています。

[8009d8a9ba] git 2022-05-04 19:49:36 UTC

version.h の日付更新

[197f9e9d42] Burdette Lamar 2022-05-04 20:04:36 UTC

doc/format_specifications.rdoc の記述されていなかったセクションに追記しています。 https://github.com/ruby/ruby/pull/5877

[0b62535219] Akira Matsuda 2022-05-05 09:01:08 UTC

標準添付ライブラリ logger で log level (severity) の 1文字目を切り出すのに 0..0 という Range を使ってたのを String#[offset, len] の 2引数の指定を使うようにリファクタリング。一時オブジェクトの生成を抑制するためとのこと。なるほど。

ruby-trunk-changes 2022-05-04

今日は主に bundler の更新などがありました。

[fe7c02c744] Peter Zhu 2022-05-02 18:45:52 UTC

YJIT の実装のために導入された rb_darray というデータ構造のメモリ確保の関数やマクロの _with_gc という suffix つきの variant を削除しています。YJIT が Rust 実装になったので不要になったとのこと。

[529c98ab90] Nobuyoshi Nakada 2022-05-03 16:22:49 UTC

doc/extension.rdoc および doc/extension.ja.rdoc に直接 #include してよいヘッダファイルと依存して良いマクロ/関数についての記述を追記しています。

[4d28553c7d] git 2022-05-03 17:00:24 UTC

version.h の日付更新

[cf71e5f62a] Maxime Chevalier-Boisvert 2022-05-03 17:44:43 UTC

YJIT のテストに opt_plus 命令に未対応の型のオブジェクトが渡された時のテストを追加しています。 https://github.com/ruby/ruby/pull/5878

[379f5a6e8e] Alan Wu 2022-05-02 22:36:43 UTC

T_CLASS 型オブジェクトが GC.compact で移動した時の rb_classext_t の内容を更新する update_class_ext() で rb_classext_t::includer メンバーの更新が漏れていたのを修正しています。

[ba4ec45cf1] David Rodríguez 2022-04-27 22:05:22 UTC

bundler で依存関係解決時に Bundler.frozen_bundle? というフラグが真の時に Gemfile.lock に記載されている spec から既に Gemfile に記述がないものを削る converge_locked_specs という処理を呼ばないように修正しています。

[2cf4318645] David Rodríguez 2022-04-28 08:28:31 UTC

bundler の Bundler::Definition::GemHelper#converge_specs というメソッドで Enumerable#each のかわりに Enumerable#select を使ってより ruby らしい使いかたをするようにリファクタリングしています。

[42538ad710] David Rodríguez 2022-04-28 08:20:50 UTC

bundler のテストでサンプルの lockfile 内でのインデントの修正。

[9d61c4519c] David Rodríguez 2022-04-28 08:20:33 UTC

bundler の依存関係解決時に converge_locked_specs というメソッドのかわりに SpecSet というクラスを利用した実装を使って lockfile の記述からの変更がない時の高速化を図っているそうです。