ruby-trunk-changes 2021-10-27

今日は子クラスリストを得る Class#descendants メソッドの新規追加、String#unpack, #unpack1 の offset キーワード引数追加などの機能追加のほか TracePoint のメモリリーク修正、error_highlight の複数 Ractor 対応などがありました。

[e3a783b141] Nobuyoshi Nakada 2021-10-26 14:39:43 UTC

afdca0e780760e008e26f4c9fc7262a0a4fe56bb で struct RFloat の float_value が align されてないので align されてないメモリアクセスができないアークテクチャ向けの対応を入れてましたが、アライメントの取られた位置にメンバーが配置されるようにした rb_float_value_type という型を作って float_value の型をこれにしています。なるほど memcpy() が不要になったぶん効率的になったのかな。

[26353c75a9] Nobuyoshi Nakada 2021-10-26 15:50:41 UTC

e3a783b14191fef175c9a59996afdc744c8edc4c の追加修正で rb_float_value_type の型をただの double にできる条件として sizeof(VALUE) と sizeof(double) が同じだった場合が弾かれてたので条件を修正しています。

[66e318503f] git 2021-10-26 17:05:22 UTC

version.h の日付更新

[a4d5ee4f31] Peter Zhu 2021-10-22 18:03:23 UTC

TracePoint の T_TYPEDDATA で wrap する構造体についてその解放関数が RUBY_TYPED_NEVER_FREE になっていて GC 時に回収しないようになっていたのでメモリリークしていたのを RUBY_TYPED_DEFAULT_FREE にして普通に回収するようにしています。これなんで解放しないようになってたんだろう。 [ruby-core:105755] [Bug #18264]

[717ab0bb2e] Jeremy Evans 2021-10-26 19:35:21 UTC

Class#descendants というメソッドを新規追加しています。そのクラスを継承している子クラスをリストにしたものを返します。ありそうでなかったメソッドですが、これ確か効率よく実装するのが難しいみたいな話をきいたような気がしますが、今はもう同様の処理をする関数があるのでそれを wrap しているだけみたいですね。 [ruby-core:85073] [Feature #14394]

[e5319dc985] Jean Boussier 2021-10-18 14:23:54 UTC

String#unpack と String#unpack1 に、読み取りをはじめる位置を指定するキーワード引数 offset を追加しています。おお、なるほど便利かも。 [ruby-core:105660] [Feature #18254]

[33844f3096] Nobuyoshi Nakada 2021-10-27 01:16:52 UTC

thread.c と missing/langinfo.c の無引数の関数定義の引数部分に明示的に void を書くようにコーディングスタイルを修正しています。

[4c32fcb84f] Yusuke Endoh 2021-10-27 02:25:58 UTC

標準添付ライブラリ error_highlight で ErrorHighlight.formatter を保持するのにクラス変数を利用していたのが複数 Ractor で利用する時に問題だったので Ractor local storage を使って Ractor 毎に保持するようにしています。

[ed5f8eaf49] David Rodríguez 2021-10-26 11:35:51 UTC

bundler で Gemfile.lock に書かれてる bundler のバージョンが古い時に警告を出す機能は書かれているバージョンが最後に dev がついている開発版のものだったら警告を出さないようにしています。

[9541b3b7c0] Kazuki Yamaguchi 2021-02-25 06:52:27 UTC

Random オブジェクトが wrap する構造体 rb_random_mt_t の解放関数で複数 Ractor の対応のために Ractor local storage に保存しているものと同じ構造体を指していたら解放しないようにしていたのをやめています。現在はもう不要になっていた? らしいのと sweep 処理中に Ractor local storage をさわることでメモリ確保が必要になって異常終了することがあったようです。 [ruby-core:102589] [Bug #17653]

[489e5e3a82] Satoshi Moris Tagomori 2021-08-24 12:00:00 UTC

Module#define_method にブロック(Proc オブジェクト)を渡して定義したメソッドを他の Ractor から呼び出した時の例外メッセージを少し詳しくしています。

[219f54152a] Kazuhiro NISHIYAMA 2021-10-27 07:18:18 UTC

NEWS の default gems と bundled gems のバージョンの項目の更新と追加。

[5ff47e0c8a] Nobuyoshi Nakada 2021-10-27 04:19:52 UTC

configure で -Werror=old-style-definition というコンパイラフラグが使えたら wflags に追加するようにしています。33844f3096ed15eb1568d6aa333d8040ec9f074a のようなスタイルの修正のためですね。

[9fc2f5375d] Kazuhiro NISHIYAMA 2021-10-27 07:55:15 UTC

NEWS のチケット参照のリンクのための footnote のところのチケット集をチケット番号でソートしています。

[5086c25f60] Vít Ondruch 2021-10-21 11:02:38 UTC

テスト用のライブラリで実行するテストメソッドを -n オプションで絞る時に正規表現を渡して否定型にして特定のメソッドを除外しようとした時に、テストクラスつきのフルネーム(TestXxx#test_foo)だけでなくメソッド名だけの文字列ともマッチさせていたためうまく除外できていなかったので、filter が正規表現の時はフルネームとだけマッチするかチェックするように変更しています。