ruby-trunk-changes 2020-05-03

今日は ObjectSpace::WeakMap#key? の不具合修正や rubyspec の更新、MJIT の JIT unit をまとめてコンパイルする変更の追加修正などがありました。

[91e4e2403e] Yusuke Endoh 2020-05-02 12:34:10 UTC

f22c4ff359498ab342e4b6d6feb21af6004ee270 で --help オプションの出力を pager で表示させるために ruby.c 内に直接 fork(2) の呼び出しが追加されたのが Solaris でビルドエラーになるそうで rb_fork() という wrapper 関数に切り出してここで -Wdeprecated-declarations の警告を局所的に抑制させるようにしています。またもともと rb_fork_ruby() という関数定義の全体で警告抑制していたところも rb_fork() を使うようにして全体を警告無視する対象にしなくてすむようにしています。

[b78fba447a] Yusuke Endoh 2020-05-02 13:17:03 UTC

91e4e2403e950d06eb49840bdb11409321002847 の rb_fork() の定義部分を #ifdef HAVE_WORKING_FORK でくくって、そもそも fork() が使えない環境では定義しないようにしています。

[a68ddf4287] Benoit Daloze 2020-05-02 14:03:12 UTC

spec/mspec を upstream に追随させています。

[a2be428c5f] Benoit Daloze 2020-05-02 14:08:36 UTC

ObjectSpace::WeakMap#key? で対応する値が nil だった時に値がないものとして扱われてしまっていたので区別できるように修正しています。 [ruby-core:98118] [Bug #16826]

[de8b8b609a] Nobuyoshi Nakada 2020-05-02 13:42:12 UTC

rubyspec の Kernel#system のテストで子プロセス終了後の $?.exitstatus を具体的にチェックしているのが環境依存になるため success? メソッドによる抽象的なチェックに修正しています。

[e964f67b89] Nobuyoshi Nakada 2020-05-02 14:15:00 UTC

spec/ruby/optional/capi/ext/rbasic_spec.c の最終行に改行がなかったのを追加しています。

[c2dc52e18b] Benoit Daloze 2020-05-02 14:13:57 UTC

ObjectSpace::WeakMap#[]= の実装である wmap_aset() の引数名の改名。

[9998161b10] Nobuyoshi Nakada 2020-05-02 15:05:19 UTC

spec/ruby/optional/capi/shared/rbasic.rb で should を忘れて単なる比較をしていてチェックになっていなかったところを修正しています。

[717680f197] Nobuyoshi Nakada 2020-05-02 15:11:47 UTC

同じく spec/ruby/optional/capi/shared/rbasic.rb で struct RBasic の flags の値のチェックを修正していますが、よくわからない helper (たぶん本来 ruby レベルでいじれない flags を強制的にセットしたり参照したりしている)だらけでよくわからない。おそらく flags をいじったあとで元に戻すようにしているようです。

[cfe0e660f4] Nobuyoshi Nakada 2020-05-02 15:15:56 UTC

vm_insnhelper.c の callable_class_p() で VM_CHECK_MODE が 2以上でビルドした時の switch() 文の警告抑制のため default 節を追加しています。

[fe2a832ace] git 2020-05-02 15:16:23 UTC

version.h の日付更新

[224f29c8e9] Yusuke Endoh 2020-05-02 15:09:58 UTC

rubyspec の Process.clock_getres(Process::CLOCK_MONOTONIC, :nanosecond) のテストで Android では resolution が 10 msec らしいので上限を大幅にゆるめています。

[cc6afff006] Takashi Kokubun 2020-05-03 04:30:24 UTC

MJIT の複数ソースコードをまとめてコンパイルしなおす compact_all_jit_code() の呼び出し条件にあまり大量の JIT unit をひつつにまとめてしまわないように上限を設定するようにしています。 compact_list は入れたら入れっぱなしだから実質 1プロセス内での JIT unit の compaction を適用する上限を設けたことになるのかな。

[8af098b40e] Nobuyoshi Nakada 2020-05-03 05:34:46 UTC

rubyspec の struct RBasic::flags についてのテストのための拡張ライブラリで VISIBLE_BITS として定義したビットフラグのみ ruby スクリプト側にみせるように修正しています。 reserved の領域のフラグは隠す(0にする)ようにしています。

[e49ecaed57] Nobuyoshi Nakada 2020-05-03 05:38:19 UTC

Complex.polar の実装で cos(3), sin(3) の呼び出しを DBL2NUM() マクロの引数として直接渡していたので複数回呼び出され得るので一旦変数に格納して渡すようにしています。 また __sinpi() と __cospi() という組み込み関数があったらこちらのほうが最適化されやすい? のでこれを使うようにしています。
[追記]この変更はマクロの引数にするのを避けるためというより、sin(3) と cos(3) の呼び出しが連続して行なわれているとコンパイラが最適化して両方いちどに計算する関数呼び出しに展開してくれるという最適化が行なわれることがあるそうで、それを期待してのものだそうです。[/追記]

[e0c023d1c8] Takashi Kokubun 2020-05-03 07:33:56 UTC

MJIT の C ソースコードを 1つにまとめてから直接共有ライブラリにコンパイルする手法が macOS で CI の失敗になっていたのが .dSYM ファイルが残ってしまうためだったそうなので、 MJIT のテスト全体をスキップするかわりに darwin で --jit-debug がオンになっていた時だけ当該 assertion のみスキップするように範囲を狭めています。

[a218cbdf31] Takashi Kokubun 2020-05-03 07:41:27 UTC

AppVeyor のテストで Visual Studio 2013 で MJIT の precompiled header まわりの不具合のため skip していた MJIT のテストが Visutal Studio 2015 でも再現するらしいので除外する条件に追加しています。

[4aca078bda] Takashi Kokubun 2020-05-03 07:45:18 UTC

818d6d33368a396d9cd3d1a34a84015a9e76c5c8 で MJIT のソースコードをまとめてコンパイルする時のコンパイラオプションに cc_added_args のデバッグオプションなどの追加に対応していなかったのを追加対応しています。

[f646d20aae] Benoit Daloze 2020-05-03 10:28:27 UTC

spec/mspec を再度 upstream に追随。 86431f5075d0495783776b0d7f162df387e7cde6 のあたりの変更が a68ddf42879005905176bc38285906fe01707aff の更新時に巻き戻ってしまったので再度入れているようです。

[5aaa75e7c1] Benoit Daloze 2020-05-03 10:28:29 UTC

ruby/spec も再度 upstream の変更に追随させています。