ruby-trunk-changes 2023-12-08

今日は GC.verify_compaction_references の実装の変更、compaction 対応の漏れの修正、トップレベルでの eval("return") が成功するようにする変更などなど多くの変更がありました。

[5d832d16d9] KJ Tsanaktsidis 2023-11-27 05:49:18 UTC

objspace_each_pages() という C API を追加しています。objspace_each_objects() と同様に objspace の page についてコールバック関数を呼ぶ関数で、実装の共通部分は objspace_each_exec() という関数に切り出しています。 objspace_each_objects() との違いはコールバック関数の引数が struct heap_page 構造体をそのまま渡すという点みたいです。 [ruby-core:115484] [Bug #20022]

[cbc0e0bef0] KJ Tsanaktsidis 2023-11-27 05:50:05 UTC

5d832d16d9878766dfe527934ef1ad64698b9bf8 で導入した objspace_each_pages() を利用して GC.verify_compaction_references の実装で2倍の page を用意して本当に全ての移動可能なオブジェクトが slot を移動するようにしているようです。主にデバッグ用のメソッドなので「たまたま移動が不要な位置にいたので移動しなかった」というのは嬉しくないということみたいですね。 [ruby-core:115484] [Bug #20022]

[0dc40bd2b7] Peter Zhu 2023-12-06 21:38:59 UTC

GC.stress に true が設定されていた時に異常終了する可能性があった不具合の修正。

[5809b75019] Stan Lo 2023-12-07 16:09:09 UTC

irb の debug.gem との連係のコマンドの警告メッセージでコマンド名が決め打ちになっていたのを修正。 https://github.com/ruby/irb/pull/806

[050806f425] Alan Wu 2023-12-07 01:35:40 UTC

env_copy() で RB_GC_GUARD() による GC の mark 漏れになる最適化避けのかわりに RGenGC 用の Write Barrier を追加しています。

[195dbf241f] Alan Wu 2023-12-07 02:00:37 UTC

env_copy() にさらに RGenGC 用の Write Barrier を追加し、また env オブジェクトの確保と値のコピーの順序を変更しています。 compaction が発生した時の異常終了の可能性があったのを修正しているようです。

[e6a6ea9dcf] Nobuyoshi Nakada 2023-12-07 16:20:15 UTC

rubyparser.h の個別の NODE の構造体のコメントの typo 修正。

[ca204a2023] Jeremy Evans 2023-12-07 16:35:55 UTC

キーワード引数を Hash で渡した時に呼び元の Hash を変更できる可能性があった不具合を修正しています。

[5f81f58b26] John Hawthorn 2023-12-07 03:17:40 UTC

hash_st_free() で ruby_xmalloc() で確保した領域の解放にただの free(3) を使っていたところを xfree() を利用するように修正しています。

[0c3593b657] John Hawthorn 2023-12-07 03:29:06 UTC

逆に ruby_dtoa() で確保されたメモリ領域は素の malloc(3) で確保されるように変更になっているので解放を xfree() でなく free(3) を呼ぶように修正しています。

[3a88de3ca7] Jeremy Evans 2023-10-25 19:49:28 UTC

スクリプトのトップレベルの return が可能になったのに eval 内での return が LocalJumpError になっていたので同じように実行できるよう対応しています。 [ruby-core:114251] [Bug #19779]

[1721bb9dc6] Takashi Kokubun 2023-12-07 17:41:06 UTC

test_reachable_objects_during_iteration という拡張ライブラリ objspace のテストが mswin 環境でよく失敗するとのことで skip するようにしています。

[3081c83169] Jeremy Evans 2023-10-27 00:03:17 UTC

Struct で作ったクラスのインスタンスに obj.x や obj.x= のようなメソッドでその属性にアクセスする時に TracePoint などによるコールバックが呼ばれないという不具合を修正しています。 [ruby-core:109083] [Bug #18886]

[40a2afd08f] Jeremy Evans 2023-11-03 23:56:58 UTC

VM 命令列へのコンパイル時の peephole 最適化にメソッドの呼び出しに通常引数に追加して配列の splat 渡しをした時にも中間オブジェクトの配列の作成を抑制する最適化を追加しています。

[c70c1d2a95] Jeremy Evans 2023-11-06 20:08:03 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 の続きでさらにブロック引数を &blk のように渡してメソッド呼び出しをする時にも中間オブジェクトの確保を抑制する最適化をするようにしています。

[1731dd05a7] Jeremy Evans 2023-11-06 20:37:16 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 からの続きでキーワード引数を **kw のような splat 渡しが追加されている時も最適化対象にしています。

[95615872e3] Jeremy Evans 2023-11-06 20:39:57 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 からの続きで splat 引数渡しと keyword splat 引数渡しとブロック引数渡しがすべてある場合も中間オブジェクトの生成を抑制するようにしています。

[5e33f2b0e4] Jeremy Evans 2023-11-06 21:03:02 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 からの一連の最適化の続きで splat 引数渡しとキーワード引数の両方がある場合も対象に追加しています。

[aa808204bb] Jeremy Evans 2023-11-06 21:17:49 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 からの一連の最適化の続きで splat 引数渡しと通常のキーワード引数に続いてブロック引数渡しがある場合も中間オブジェクト抑制の最適化の対象に追加しています。

[13cd963500] Jeremy Evans 2023-11-21 17:02:31 UTC

メソッド呼び出しの引数処理の setup_parameters_complex() で配列で渡された引数のオブジェクトの複製を追加しています。あれ結局複製がいるのか。コミットログをみると不要かもしれないみたいなことが書かれていますので保険ですかね。

[f5a01b0916] Jeremy Evans 2023-11-28 18:58:22 UTC

メソッド呼び出しに引数の splat 渡しを含むさまざまな呼びかたをした時のベンチマークを追加しています。

[7738b31d39] Jeremy Evans 2023-11-30 23:30:30 UTC

40a2afd08fe1b921f1052b29031abfa1869e0557 からの一連の最適化の続きでブロック引数を渡す時の対応をもっと一般化して対象を増やしているみたいです。より多くのパターンを中間オブジェクト抑制の最適化の対象に追加しています。

[6816e8efcf] Adam Hess 2023-10-12 18:15:53 UTC

ruby_vm_destruct() でプロセス終了時に rb_free_on_exit という変数が真だったら malloc() で確保されたメモリを全て解放してから終了するようにしています。通常は明示的な解放はしなくても問題ないはずですがメモリリークチェックのツールなどでリーク検出したい時に誤検出になるのでそれを避けるためという同期のようで、この rb_free_on_exit 変数は起動時に環境変数 RUBY_FREE_ON_EXIT が設定されていたら(空文字列でも)真にするようにしています。起動時にチェックされるのでスクリプト内で環境変数セットしてもおそらく効きません。

[f76881c9af] BurdetteLamar 2023-12-07 20:36:37 UTC

Complex クラスの rdoc 用コメントの手直し。

[2755cb1b2f] David Rodríguez 2023-12-07 21:10:33 UTC

rubygems と bundler でメソッド引数に :key => value みたいな Hash の記法を書いてたのを key: value のようなキーワード引数の記法を使うようにしています。

[8bb90f4d77] Yuji Yaginuma 2023-12-08 02:10:14 UTC

bundler の bundle gem によるプロジェクト作成時の Rakefile のテンプレートでテスト用のタスクに Rake::TestTask を使ってたのを minitest の Minitest::TestTask.create を利用するように変更しています。

[9b7a964318] Nobuyoshi Nakada 2023-12-07 11:04:33 UTC

e8896a31d48e5797df3878696dcb50aed85b87c21802d14ca8924bd67e0915c5ad9f1fad5dba0602 の式が "()" のかっこの中に入っているかどうかで挙動を変更する変更の影響が flip-flop にあったみたいで parse.y の cond0() という関数に引数を追加して ".." や "..." の時(flip-flop の時)は条件部の直下にある時だけ flip-flop の構文として解析するようにしています。 [ruby-core:114722] [Bug #19877]

[352a885a0f] Koichi Sasada 2023-11-16 17:29:11 UTC

Thread のライフサイクルイベントのコールバックを登録する C API の利用時に使うための拡張ライブラリから使える thread local storage を作る rb_internal_thread_specific_key_create()、rb_internal_thread_specific_set()、rb_internal_thread_specific_get() などの C API を追加しています。

[51ab9ebca1] 卜部昌平 2023-12-08 04:14:19 UTC

include/ruby/ruby.h の rb_errno()、rb_errno_set()、rb_errno_ptr() などの errno 関係の関数に Doxygen 用のコメントを追記しています。

[0166d56f2b] Martin Emde 2023-12-08 04:18:09 UTC

bundler による rubygems の拡張の Gem::NameTupple#lock_name でインスタンス変数にキャッシュをするのをやめています。呼び元のほうで memo 化されているので不要ということみたいです。

[4817166e54] Samuel Giddins 2023-10-21 00:56:22 UTC

rubygems の gem generate_index サブコマンドの実装を専用の gem に切り出しているようです。

[d61af5c49a] David Rodríguez 2023-12-07 20:29:25 UTC

require で対象の default gems について警告を出力するための lib/bundled_gems.rb で LoadError のエラーメッセージに追加するところで net/http みたいな feature 名を net-http のように gem 名に変更してから警告追加のチェックに使うように修正しています。

[a530dfef2b] David Rodríguez 2023-12-07 20:30:26 UTC

同じく lib/bundled_gems.rb で警告メッセージの組み立てを修正しています。説明に標準添付ライブラリ版が読み込まれたということを追記しています。

[64e985333f] David Rodríguez 2023-12-07 20:35:47 UTC

さらに lib/bundled_gems.rb で警告メッセージに bigdecimal/math のようにネストしたファイルの require 時のメッセージが自然になるように修正しています。

[8f6cf72e66] Hiroshi SHIBATA 2023-12-08 06:57:08 UTC

64e985333f4fa7e4ba06454ef50c41e56a22768d の続きで lib/bundled_gems.rb でそもそも bigdecimal/math みたいなネストしたパスの require 時は警告対象にしないようにしています。

[dc64a04a12] David Rodríguez 2023-12-07 21:51:14 UTC

33b92c2d6bcba16382cbb33159b8ce7e4d9802derubygems の Gem::RemoteFetcher::FetchError 例外のメッセージにサーバーからのレスポンスボディも追加したのを revert しています。

[1c3aa4b977] David Rodríguez 2023-12-07 18:22:20 UTC

bundler の man ページの更新。

[01a2a0abc6] David Rodríguez 2023-12-07 17:11:56 UTC

bundler の man ページの再度更新。生成に使うのを ronn から nronn に変更したみたいです。

[dab30b4d71] Hiroshi SHIBATA 2023-12-08 06:32:25 UTC

bundler のテスト用の gemfile である tool/bundler/dev_gems.rb の doc グループでの依存関係を ronn から nronn に変更しています。

[f2c84c4884] Hiroshi SHIBATA 2023-12-08 06:33:13 UTC

4817166e54ad98f9b3e9d06e9e8c7ccff992a957rubygems の gem generate_index を外部の gem に分離した対応で bundler のテスト用の tool/bundler/test_gems.rb に rubygems-generate_index への依存関係を追加しています。また compact_index の依存バージョンも更新しています。

[cc9826503d] Hiroshi SHIBATA 2023-12-08 11:25:04 UTC

8f6cf72e661e36410848c1451335fd28a32cecdfbigdecimal/math のように default gems のネストしたパスの require を警告対象から外したのを revert しています。