ruby-trunk-changes 2021-03-19

今日は Hash の一部の複製を作るメソッドで不要な rehash を避ける最適化や emscripten でのビルド向けの修正などがありました。

[d094c3ef04] Marc-Andre Lafortune 2021-03-16 03:51:13 UTC

Hash#select や Hash#reject の実装で Hash オブジェクトを新規に作成して rb_hash_aset() で追加していくと rehash が起きることがあるので、receiver をコピーしてから不要になったやつを消していくという方式に変更しています。なるほどなー。 [ruby-core:98978] [Bug #16996]

[0ef2923c2b] Marc-Andre Lafortune 2021-03-16 02:15:03 UTC

d094c3ef046aba0bb99fd08bcbc72ff87216e736 と同様に Hash#replace, Hash#dup, Hash#initialize_copy などでひとつひとつ要素を追加するのではなく st_copy() などを使った複製をすることで負荷を下げるようにしています。Hash の複製って結構頻繁に使われてそうだし、これどのくらい効くのかな。 [ruby-core:98978] [Bug #16996]

[b9908ea666] Alan Wu 2021-03-18 17:03:56 UTC

eval.c の rb_raise_jump()、rb_using_refinement()、rb_using_module() などの関数に static 修飾子がついてなかったので追加しています。

[dae71be2c8] git 2021-03-18 19:03:33 UTC

version.h の日付更新

[cc281bd7ac] S-H-GAMELINKS 2021-03-18 11:43:14 UTC

complex.c に float_arg() の冗長な宣言があったので削除しています。

[f748b911c9] Nobuyoshi Nakada 2021-03-18 09:48:56 UTC

環境変数 RUBYLIB に不正なバイト列を含む文字列がセットされてる場合に無限ループ状態になってハングアップする不具合を修正しています。 eval_intern.h で定義されてる CharNext() というマクロが不正な文字をみつけた時にmblen() が -1 を返すためカーソルが進まなくなってしまうというのを修正しています。 [ruby-core:102915] [Bug #17729]

[d97ed004e8] Yusuke Endoh 2021-03-19 03:30:59 UTC

configure で emscripten 向けのビルド時の LDFLAGS に追加する -s オプションと引数の間に空白を入れないようにしています。

[e79b42c9b2] Yusuke Endoh 2021-03-19 03:32:33 UTC

configure で pthread_sigmask() のチェックを emscripten でのビルド時には強制的に存在しないものとするようにしています。

[c576e63ee7] Yusuke Endoh 2021-03-19 03:35:48 UTC

gc.c で Emscripten でのビルド時にマシンスタックおよびレジスタ(を退避した?)の領域を取得する emscripten_scan_stack() と emscripten_scan_registers() という API を利用して mark 対象を得るようにしています。おお、こういう API があるのか。かっこいい。

[a85ed626f1] Marc-Andre Lafortune 2021-03-19 03:29:49 UTC

Enumerable#inject の引数が :"+" の時の最適化(そんなのしてたっけ)で Fixnum からあふれそうになった時の rb_big_plus() に渡す引数を ULONG2NUM() で変換してしまっていたので符号が失なわれる場合があった不具合を修正しています。 [ruby-core:102922] [Bug #17731]

[4ea96f1d4f] Nobuyoshi Nakada 2021-03-19 06:23:03 UTC

macOS でバージョンによって CommonCrypto/CommonRandom.h というヘッダが使える場合はこのヘッダを使って CCRandomGenerateBytes() という API を SecRandomCopyBytes() のかわりに利用するようにしています。

[dc7044eb48] Rick Mark 2021-03-19 06:27:42 UTC

macOS でビルドする時のコンパイラオプションに -framework Foundation を追加しているせいで大量のダイナミックライブラリとリンクされるというのをさけるため -framework CoreFoundation に変更しています。 [ruby-core:102919] [Feature #17730]

[9e71f1aa4c] Nobuyoshi Nakada 2021-03-19 09:56:41 UTC

4ea96f1d4f8a50c204c4367c994cdbf12cd97b64 の追加修正で CommonCrypto/CommonRandom.h とともに CommonCrypto/CommonCryptoError.h というヘッダも利用するようにしています。コメントによると古い Xcode でのビルドのためとのこと。