ruby-trunk-changes 2020-07-23

今日は Enumerator::Lazy の zip と flat_map の実装の高速化や Module#prepend と Refinements の組み合わせでの修正のメモリ使用量を抑える変更、timezone を指定して作った Time の strftime の不具合修正などがありました。

[d47e124857] Jeremy Evans 2020-05-29 22:54:30 UTC

暗黙のブロックパラメータ _1, _2 のような numbered parameter と同名のローカル変数を使うのを警告にしていたのを文法エラーに変更しています。

[fdcbb288ab] git 2020-07-22 15:35:16 UTC

version.h の日付更新

[37e6c83609] Alan Wu 2020-07-22 21:27:03 UTC

98286e9850936e27e8ae5e4f20858cc9c13d2dde の Module#include, #prepend と refinements の修正の再修正で rb_mod_refine() で rb_ensure_origin() を呼び出していたのをやめて rb_prepend_module() 内で対象の Class/Module に RCLASS_ORIGIN() が無かった時だけ継承ツリーを複製して ORIGIN の生成をするようにしているようです。コミットログによると省メモリ化のためらしい。

[5d04ac6ea2] Burdette Lamar 2020-07-23 00:06:49 UTC

Array の rdoc 用コメントを強化しています。 https://github.com/ruby/ruby/pull/3350

[6a0cb1d649] Jean Boussier 2020-07-22 10:47:14 UTC

拡張ライブラリ objspace の ObjectSpace.dump で Module/Class を文字列化する時に無名 Module/Class だったら不要な文字列追加を避けるようにしています。

[cd429e68d2] Nobuyoshi Nakada 2020-07-22 16:05:15 UTC

default gem になった標準添付ライブラリ optparse の gemspec で required_ruby_version を 2.5 以降に更新しています。

[f120e65200] Nobuyoshi Nakada 2020-07-22 16:08:06 UTC

標準添付ライブラリ optparse に定数 OptionParser::Version を追加して gemspec ファイルでこれを、require するのではなくファイル内容を正規表現で切り出して使うようにしています。

[8ed687a4d7] Nobuyoshi Nakada 2020-07-23 02:32:54 UTC

Time.new などで timezone を指定した時に Time#strftime で %U %V %W などの指示子が正しく表示されない不具合についてのテストを追加しています。修正は次のコミットみたいですね。 [ruby-core:99265] [Bug #17042]

[afacf85e44] "S.H" 2020-07-23 02:35:20 UTC

8ed687a4d7b7a77f30f8e937f58aae74bfb699b6 で先にテストを追加した timezone 指定して作った Time オブジェクトの strftime の %U %V %W 指示子の不具合修正。 [ruby-core:99265] [Bug #17042]

[caf565f7bf] Nobuyoshi Nakada 2020-07-23 02:48:59 UTC

99a9c3fe2eaab8157765d792dc871da6daea0327afacf85e443cc64dd41c248659b65476434b4175 で timezone 指定して作った Time オブジェクトについての修正で使った共通の処理を MAKE_TM_ENSURE() という関数マクロとして定義するリファクタリング[ruby-core:99265] [Bug #17042]

[1d8b689b9e] Alan Wu 2020-07-23 00:46:24 UTC

191ce5344ec42c91571f8f47c85be9138262b1c7 で導入したキーワード引数関連の警告で繰り返し同じ警告が出ないよう抑制するために構造体 struct rb_iseq_constant_body に追加したメンバー iseq_unique_id は、既に暗黙の keyword 引数変換が廃止されたので不要になっていたので削除しています。

[c4fc737f75] 卜部昌平 2020-07-22 07:11:08 UTC

include/ruby/util.h の "_()" というマクロが未定義の時の "_()" と "__()" の定義は実際には有効になることがない(include/ruby/backward/2/stdarg.h で常に "_" が定義されるらしい)ので削除しています。

[ff397d0016] 卜部昌平 2020-07-22 07:18:01 UTC

dln.h でも "_" マクロの定義を削除しています。

[347639ad8a] Nobuyoshi Nakada 2020-07-23 05:55:53 UTC

6a0cb1d649ecfc3e2af922c74ce82b3ff95fb12a で追加した ObjectSpace.dump のテスト test_dump_allocations と test_anonymous_class_name の一部がオブジェクトの確保数に依存しているため、テストの実行順序とかに依存して失敗しやすいみたいなので削除しています。なんとなくそんな気はした。 https://github.com/ruby/ruby/pull/3349

[89a86788e6] Nobuyoshi Nakada 2020-07-21 00:11:20 UTC

Enumerator::Lazy の生成時に使う関数 lazy_init_yielder() から登録された関数ポインタの関数を呼び出したりする実際の処理を lazy_yielder_result() という関数に切り出し、これを利用する lazy_yielder_yield() という引数に struct MEMO を渡して呼び出せる関数を追加しています。まだ使われていませんが次の 6b3cff12f6add831c678ce7a5288097714bc6850 でこの関数を使って Enumerator::Lazy の効率化をしているようです。

[6b3cff12f6] Nobuyoshi Nakada 2020-07-21 15:58:48 UTC

Enumerator::Lazy#flat_map の実装で 89a86788e66def6f2778926528f63e353935574b で追加した lazy_add_method() を利用した実装に変更して、中間オブジェクトの生成やメソッド呼び出しを減らして最適化しています。

[54acb3dd52] Nobuyoshi Nakada 2020-07-22 00:52:50 UTC

同様に Enumerator::Lazy#zip の実装も 89a86788e66def6f2778926528f63e353935574b で追加した lazy_add_method() を利用した実装に変更して高速化しています。 さらにこれで lazy_set_method() が不要になった(この2つでしか使われてなかったのか)のでコメントアウトしています。