ruby-trunk-changes 2019-08-05

今日は VM 命令 opt_eq/opt_neq を MJIT 時にインライン化可能にする最適化や rubygems の更新などがありました。

[346aa557b3] Takashi Kokubun 2019-08-04 11:11:00 UTC

VM 命令の opt_eq と opt_neq の attribute の leaf を true にして MJIT でインライン化可能にしています。ついでに(?) string.c の static 関数 str_eql() を internal.h の inline 関数 rb_str_eql_internal() に移動しています。opt_eq_func() で引数の型チェックを追加して rb_str_eql_internal() を呼ぶようにして例外発生の可能性を消してるのだと思います。 https://github.com/ruby/ruby/pull/2318 [Bug #15589]

[76e2370f13] Nobuyoshi Nakada 2019-08-04 13:19:18 UTC

5931857281ce45c1c277aa86d1588119ab00a955 の再修正。 rb_require_internal() でも load_lock() に渡す前の path を fstring 化するようにしています。 [ruby-core:94122] [Bug #16041]

[7817a6fa09] git 2019-08-04 13:27:17 UTC

76e2370f132f83c16c9de39a0a9356579f364527 のインデントのタブを空白に展開。

[164f1ac0e9] Takashi Kokubun 2019-08-04 14:08:22 UTC

7a75baa6e294473f02da512c99f7ef1f76b2d83c で一時的に MJIT 有効化で skip するようにしたテストを復活させています。 76e2370f132f83c16c9de39a0a9356579f364527 で直ってるかもしれないみたいです。

[aaf69a8ba8] Takashi Kokubun 2019-08-04 14:41:33 UTC

076f3fcf11a061394d3d5f8c671512df1e983023 と同様に子プロセスにシグナル送信するテストで子プロセスの状態変化を待つ sleep 時間を 3秒に伸ばしています。

[d6ac5c53d4] Nobuyoshi Nakada 2019-08-04 23:55:09 UTC

b452c03a14f943ae25338547bd680fce67399d85 で RUBY_ASSERT_MESG_WHEN() の引数が必ず 1回は評価されるようにしてたのを revert しています。 assert が無効な状態でも評価されるためベンチマークに影響があったそうです。 ASSERT 系マクロで副作用があることを期待した使いかたをしてるほうが間違いということで不要な評価は削っているようです。

[253da5b219] git 2019-08-05 00:00:13 UTC

version.h の日付更新

[6bb3618f28] Yaw Boakye 2018-10-12 00:04:46 UTC

benchmark/other-lang に含んでた python 版の fact がループ回数が少なくなってたのを修正しています。 https://github.com/ruby/ruby/pull/1982

[548cd6e2b5] Takashi Kokubun 2019-08-05 00:16:12 UTC

346aa557b31fe96760e505d30da26eb7a846bac9 で leaf 属性を true にした VM 命令 opt_eq と opt_neq ですが、デフォルトで leaf は true なので明示的な指定と関連するコメントを削除しています。

[29092d35d3] Nobuyoshi Nakada 2019-08-05 01:47:36 UTC

tool/lib/test/unit/core_assertions.rb 内の定数 FailDesc に Proc オブジェクトとして定義した子プロセスが失敗した時の状態表示用の処理の本体を tool/lib/envutil.rb のメソッド EnvUtil.failure_description として切り出しています。

[8cfa3d861c] Nobuyoshi Nakada 2019-08-05 01:51:52 UTC

5931857281ce45c1c277aa86d1588119ab00a955 および 76e2370f132f83c16c9de39a0a9356579f364527 の再修正。76e2370f132f83c16c9de39a0a9356579f364527 の load_lock() 前に path を fstring 化するのはやめて load_unlock() する時にあらためて RSTRING_PTR() で文字列バッファのポインタを取り直すようにしています。 5931857281ce45c1c277aa86d1588119ab00a955 による yycompile() での fstring() 化による unlock の失敗に対処するためポインタを取得しなおす方法に変更しています。

[521e25baa4] Nobuyoshi Nakada 2019-08-05 02:47:25 UTC

Process.spawn 系メソッドの rlimit 関係のオプションのテストで、例外のメッセージもチェックするつもりで assert_raise を使ってたところを assert_raise_with_message を呼ぶように修正しています。

[dc0c04764f] Nobuyoshi Nakada 2019-08-05 02:55:21 UTC

Process.getrlimit のテストで二重にネストした子プロセスを起動したテストをしていたのを、assert_separately の rlimit_cpu オプションが利用できるようになってるのでそれを使って子プロセスのみでテストするようにリファクタリングしています。またただの assert を使ってたところを適宜 assert_file, assert_predicate, assert_send などの専用の assertion メソッドを利用するようにしています。

[6a265278b5] Nobuyoshi Nakada 2019-08-05 03:16:03 UTC

Fiber のテストで定義してる invoke_rec というユーティリティメソッドで、EnvUtil.invoke_ruby で起動した子プロセスがシグナルで停止してないかのチェックを追加しています。

[2403f9ac3a] NAKAMURA Usaku 2019-08-05 03:52:14 UTC

標準添付ライブラリ pstore のテストでタイムアウトを伸ばしています。 mswin での CI の安定化のためらしいです。

[58a478bce4] Yusuke Endoh 2019-08-05 05:37:53 UTC

39622232c7542d062f79277a11f6b8b6b6cfd994 で拡張ライブラリ psych に同梱している libyaml のソースで警告除去のために追加した明示的キャストの一部を、ポインタ演算をした後の値をまとめてキャストするように修正しています。

[5a8d848849] bronzdoc 2019-07-30 00:39:17 UTC

rubygems の FIXME コメントを削除しています。

[8eb2921f56] Hiroshi SHIBATA 2019-07-30 23:54:45 UTC

rubygems のブロックパラメーターを短縮して外側のローカル変数を遮蔽してる警告を抑制しています。

[87bc29fe28] bronzdoc 2019-07-31 12:33:40 UTC

a34168f2ac674b2660fa895271faea258389a614 を revert して Gem::Specification の autorequire という属性を復活させています。

[42a9e27d84] Kazuhiro NISHIYAMA 2019-08-01 09:00:32 UTC

rubygems の S3 の署名つきURL処理で BASE64 の改行を削る処理を String#gsub の第2引数に Hash を渡す記法を使うようにリファクタリングしています。

[f9dac1bd54] David Rodríguez 2019-08-01 11:20:58 UTC

rubygems の rake package のテストで最後に pkg ディレクトリを掃除するようにしています。

[2ea2108a9f] Benoit Daloze 2019-08-04 12:16:42 UTC

rubygems のテストで定数を書き換えて行うテストで書き換え後の本体部分のみ後始末の ensure の対象にするようにしています。

[86ac51c301] Benoit Daloze 2019-08-04 12:39:55 UTC

rubygemsRUBY_ENGINE という定数の defined? での存在チェックしていたところは常にこの定数はあるものとして扱うようにしています。またバージョンを得るのに常に RUBY_ENGINE_VERSION という定数を参照するようにしています(これまでは JRUBY_VERSION みたいな実装毎の定数を参照していましたが、実際には外の実装はこのような定数を用意していないため)。