ruby-trunk-changes 2021-10-01

今日は configure.ac の修正や Array#min,max の最適化命令が Refinements の影響を考慮するようにする変更、Hash の要素の loopup の最適化などがありました。

[912a8dcfc5] Nobuyoshi Nakada 2021-09-30 09:24:37 UTC

configure.ac で autoconf のバージョンをチェックしてるところで AC_PROG_CC が使えることも条件に追加しています。

[529fc204af] Jean byroot Boussier 2021-09-30 14:50:31 UTC

Marshal.load で引数に Proc オブジェクトでコールバックを渡している場合に、不完全な状態のオブジェクトが渡されて呼び出される可能性があったので、ロードが完了していないオブジェクトを憶えておく st_table を構造体に追加してロード完了するまでは呼び出さないようにしています。 https://github.com/ruby/ruby/pull/4866 [ruby-core:105104] [Bug #18141]

[bb488a1a7f] John Hawthorn 2021-09-29 02:13:24 UTC

hash.c の obj_any_hash() から rb_hash() を呼び出してたのを呼び元に展開して、rb_hash() のほうが any_hash() 経由で rb_any_hash() を呼び出すようにリファクタリングしています。ベンチマークの追加されているのとコミットログから高速化のためみたいですけど、any_hash() が組み込みの型のオブジェクトの時に直接関数呼び出しするようになっているのでそれが常に効くようにするためみたいです。再定義時の脱最適化はどうするんだろう……と思ったけどコミットログによるとこの関数が呼ばれる場所からは hash メソッドの再定義は効かないと明記されてるのでいいらしい。
RB_BIGNUM_TYPE_P() を呼ぶように変更したのが RB_TYPE_P() に戻ってるけど、これはわざとか変更前からブランチが切られたからか。

[40ef034599] git 2021-09-30 20:07:10 UTC

version.h の日付更新

[a55a5fc684] Burdette Lamar 2021-09-30 20:46:54 UTC

Enumerable のいくつかのメソッドの rdoc 用コメントを手直ししています。 https://github.com/ruby/ruby/pull/4917

[1f5f8a187a] Jeremy Evans 2021-09-30 22:18:14 UTC

Array#min と Array#max の receiver がリテラルの場合の最適化命令 opt_newarray_min と opt_newarray_max に Refinements でメソッドが再定義されているケースを考慮するようにしています。最適化命令の実装である vm_opt_newarray_{min,max}() 関数の引数に rb_execute_context_t を追加して Refinements を考慮した method entry を取得するようにしています。これって再定義されてるかどうかの判定のほうは手を入れなくてもいいんですね。 [ruby-core:105352] [Bug #18180]

[ca3cc677b3] Nobuyoshi Nakada 2021-10-01 01:41:54 UTC

configure.ac の AC_C_BIGENDIAN に引数を追加して macOS での Universal Binary のビルド時の対応を追加しています。 [ruby-core:105180] [Bug #18156]

[77804be457] Kazuhiro NISHIYAMA 2021-10-01 01:14:43 UTC

GitHub Actions の macOS 向けの workflow で macOS の 10.15 と 11 の両方でテストするように matrix に追加しています。

[8e9d696ed0] Kazuhiro NISHIYAMA 2021-10-01 01:34:50 UTC

GitHub Actions の依存関係の更新チェックの workflow でも利用する os として macos-latest と書いてたところを macos-11 に変更しています。

[60d0421ca8] Nobuyoshi Nakada 2021-09-27 16:32:50 UTC

起動時に最初から $LOADED_FEATURES 内のエントリ追加されている文字列を filesystem encoding に変換しなおすようにしています。 [ruby-core:105416] [Bug #18191]

[b6534691a1] Nobuyoshi Nakada 2021-09-28 14:24:40 UTC

60d0421ca861944459f52292d65dbf0ece26e38a の続きで起動時に $LOADED_FEATURES の内容の Encoding をセットする時に不要なコピーを作らないようにしています。

[409dbc951b] Nobuyoshi Nakada 2021-09-28 14:25:51 UTC

60d0421ca861944459f52292d65dbf0ece26e38ab6534691a16d751d59fc572d5dddebcaeb21f007 のさらに続きで Encoding のセットのしなおしがあった時だけ vm->loaded_features_snapshot の内容の書きかえを行なうようにしています。

[842b0008c1] Nobuyoshi Nakada 2021-09-29 10:59:31 UTC

60d0421ca861944459f52292d65dbf0ece26e38ab6534691a16d751d59fc572d5dddebcaeb21f007409dbc951b9875d27bd73748c88e15386473cffb のさらに続きで $LOADED_FEATURES に格納されていた文字列が filesystem encoding に対して不正なバイト列だった時にはコピーせずそのままにしておくようにしています。

[3e46117d3f] Nobuyoshi Nakada 2021-09-29 11:01:14 UTC

60d0421ca861944459f52292d65dbf0ece26e38ab6534691a16d751d59fc572d5dddebcaeb21f007409dbc951b9875d27bd73748c88e15386473cffb842b0008c132dd587f09766a228041afb7fed24f とも関係ありそうですが file.c の copy_path_class() で展開した文字列に元の文字列の Encoding をコピーするようにしています。ただし元の文字列の Encoding が US-ASCII の時には単に filesystem encoding に変更するようにしています。