ruby-trunk-changes 2022-05-17

今日は主に autoload の排他処理の追加修正などがありました。

[f626998c4f] Samuel Williams 2022-05-16 12:50:02 UTC

32de6097b2b5d8394b3a1399e13d309444697954 の autoload のデッドロック修正の続きです。変数名の改名(static 変数の autoload_featuremap を autoload_features と改名)や構造体のメンバー名/関数名の変更などのリファクタリングが混じっていてわかりにくいですが autoload_features に格納する構造体の内容を変更して定数のロード要求毎にエントリを作るようにしてロードが完了したらエントリを消すようにしています。 https://github.com/ruby/ruby/pull/5910

[f2dc972940] Kazuhiro NISHIYAMA 2022-05-16 14:40:24 UTC

標準添付ライブラリ set の rdoc 用コメントの superset? メソッドの alias についてのリンクのメソッド名の typo を修正しています。

[2411f0ad8c] Nobuyoshi Nakada 2022-05-17 03:11:18 UTC

template/Makefile.in に target_os 変数の代入を追加しています。 a7577dbfd3ea53cccf7aaf94208069784ad17791 の make test-annocheck のためのターゲットに必要だったようです。

[1f537dc62d] git 2022-05-17 03:15:01 UTC

version.h の日付更新

[8a907da0f6] Nobuyoshi Nakada 2022-05-17 03:47:01 UTC

f626998c4fa62973cac3a027597f97cdacd0d3c5 で変数の参照を削除したため VM_ASSERT() に渡してた変数が(RUBY_DEBUG が偽の通常のビルドだと)未使用になって警告が出るので if 文による分岐を復活させています。これだと ele が NULL(0)だと VM_ASSERT(ele) を呼ぶという状況になってて謎ですが、VM_ASSERT() が空文になったらコンパイラが分岐ごと消してくれるのでどのみち無駄なコードは残らないということですね。なるほど。

[60d45b2ee8] Samuel Williams 2022-05-17 07:12:36 UTC

32de6097b2b5d8394b3a1399e13d309444697954f626998c4fa62973cac3a027597f97cdacd0d3c5 の autoload の排他処理修正の続きでやはり関数名の変更などが混じってますが autoload_data_type 型のオブジェクトの解放関数を ruby_xfree() に変更してたのをやっぱり専用の autoload_data_free() を(名前は変わってるけど)復活させて struct autoload_data::constants の linked list に要素が残ってたら free しない(メモリリークするけどコメントによるとそれは VM 終了時だけ、とのこと……)ようにしています。着々と複雑になっていっている。いやー、やはり autoload の排他処理は鬼門ですね。 https://github.com/ruby/ruby/pull/5911

[11af23ee92] Samuel Williams 2022-05-17 11:44:14 UTC

autoload_data_type 型オブジェクト の mark 関数内で struct autoload_data::constants の linked list が空だったら static 変数の autoload_features の st_table から対応する要素を消すようにしていたのを autoload_delete() 内で行なうように遅延しています。mark 関数内で削除処理するというのなんとなく意外なのでこのほうが自然ですね。おそらく生存期間が延びるというか定数の削除や上書きをしないと残り続けるようになるんだと思います。 https://github.com/ruby/ruby/pull/5912