ruby-trunk-changes r65319 - r65350

今日は wercker でのテストの整備や新しい VM 命令 newhashfromarray の追加、peephole optimization の不具合修正などがありました。

mame: r65319 2018-10-23 21:23:04 +0900

File::Stat#dev_major, #dev_minor などのメソッドで整数変換するのに DEVT2NUM() を使ってたのを UINT2NUM() に変更しています。 struct stat::st_dev を直接でなく major()/minor() といったマクロを通した後の値で、それは dev_t ではないので、とのこと。環境によっては int32_t の場合もあるみたいですが。

mame: r65320 2018-10-23 21:38:48 +0900

addr2line.c に 32 bit 環境向けに明示的キャストを追加しています。

nobu: r65321 2018-10-23 21:43:07 +0900

Time::TM を Time を継承したクラスとして定義するのではなく、同様のメソッド実装を持ったクラスとして定義するようにしています。

k0kubun: r65322 2018-10-23 21:48:21 +0900

appveyor.yml で make test-all の -j つきのほうから test/rubygems/test_bundled_ca.rb を除外して、-j なしのほうで実行するようにしています。

k0kubun: r65323 2018-10-23 22:05:29 +0900

r65275 で導入した inline cache や call cache を MJIT 用にコピーする機構ですが、--jit-wait を指定されてると main thread は worker thread を待ってるので、main thread に依頼せず自分でコピーするようにしています。なるほどなー。

k0kubun: r65324 2018-10-23 22:22:07 +0900

wercker.yml のコメントアウトをはずして --jit-wait 付きの時のテストを実行するようにしています。

k0kubun: r65325 2018-10-23 22:34:50 +0900

r65324 の続きで wercker.yml で make test-all を test/ruby/ とそれ以外で 2回に分けて実行するようにしています。タイムアウトを避けるためとのこと。

k0kubun: r65326 2018-10-23 22:58:01 +0900

.travis.yml の build matrix の x86_64-darwin17 で test-all 時のオプションに -v を追加。また変数設定についてコメントを追加しています。

k0kubun: r65327 2018-10-23 23:06:36 +0900

wercker.yml で test-all 時のオプションに --logest というオプションを追加。たぶん時間のかかったテストケースを表示してくれるとかかな。

k0kubun: r65328 2018-10-23 23:10:12 +0900

.travis.yml の biuld matrix で遅い環境を先に書いて全体が速く完了するようにしています。

nobu: r65329 2018-10-23 23:17:16 +0900

test/lib/test の並列テスト用の r36388 で切り出した Test::Unit::Parallel#deal というメソッドで worker を起動するのに add_worker を呼んでましたが、これは launch_worker が正しかったそうなので修正。また 子worker からのメッセージからテスト名を切り出す正規表現をより厳密にしています。

nobu: r65330 2018-10-23 23:26:23 +0900

make test-all の TESTS 変数で対象のテストを指定する時にテストディレクトリからの相対パスとして Dir.glob にパターンを生成して渡してましたが、明示的に "/" をつけたりしてた時にはそのまま渡すようにしています。カレントディレクトリからの相対パスとかで渡すこともできるってことですよね、多分。

k0kubun: r65331 2018-10-23 23:43:19 +0900

appveyor.yml で mspec の実行時に -j オプションを使うのはあきらめた、とのことで -fs にしています。

nobu: r65332 2018-10-23 23:58:08 +0900

rubyspec の Socket.getifaddrs のテストで 1つ1つ assert してたのを Array#all? でチェックした結果で assert するように変更しています。ふーんリファクタリングかな、と思いきやコメントには "allow no address" とあるのですが、each の場合も空でもテストはパスするよな〜。しかし https://travis-ci.org/ruby/ruby/jobs/445126982#L2234-L2244 をみると、1つも expect がないとそれはそれでエラーになるのでそのためみたいでした。なるほど。

kazu: r65333 2018-10-24 00:05:09 +0900

標準添付ライブラリ drb の OpenSSL::SSL::SSLSocket を使った時のテストが Solaris ではうまく動かないとのことで skip するようにしています。

svn: r65334 2018-10-24 00:05:10 +0900

version.h の日付更新。

k0kubun: r65335 2018-10-24 00:09:49 +0900

wercker.yml で test-all を2回に分割していたのをやめています。分割しても高速化の効果がないというかより悪くなってるらしいとのこと。

nobu: r65336 2018-10-24 00:29:01 +0900

r65332 の続き。 Array#all? のブロック内で明示的に true を返すようにしています。 should は nil を返すので偽になってしまっていたようです。

k0kubun: r65337 2018-10-24 00:54:11 +0900

wercker.yml でテストに使うコンテナイメージを DockerHub の公式の ruby:2.5-stretch に変更しています。

k0kubun: r65338 2018-10-24 01:23:55 +0900

wercker.yml で --jit-wait のテストだけでなくて --jit オプションにした時のテストも追加しています。

k0kubun: r65339 2018-10-24 01:49:55 +0900

wercker.yml で test-all 時の --subprocess-timeout-scale の指定を追加してタイムアウトを伸ばしています。またオプションの指定を RUN_OPTS と TESTOPTS に分離しています。よく知らなかったけど RUN_OPTS は rubyコマンドラインオプションで TESTOPTS はテストの ruby スクリプトに渡すオプションみたいですね。

k0kubun: r65340 2018-10-24 07:51:28 +0900

wercker.yml で Queue と Signal に関するテストを除外するようにしています。

svn: r65341 2018-10-24 07:51:30 +0900

r65340 の新規追加ファイルの svn property 設定。

ko1: r65343 2018-10-24 10:57:27 +0900

Hash にリテラルの生成を VM の内部的に利用するインスタンスのメソッド m_core_hash_from_ary() を使ってメソッド呼び出しとして使っていたのを、VM 命令に newhashfromarray というのを追加して命令で処理するようにしています。メソッド呼び出しのオーバーヘッドを避けることができるのでちょっと速くなるみたいですね。これ逆に今までなんでメソッドとして実装してたんだろう。命令数を抑えるためとかかな。

ko1: r65344 2018-10-24 11:12:35 +0900

r65343 の追加修正。 VM 命令の実装の VM_ASSERT() の式に明示的キャスト追加しています。

ko1: r65345 2018-10-24 11:40:13 +0900

r65343 で追加した newhashfromarray 命令に VM 命令の attribute の leaf = false の指定を追加しています。

k0kubun: r65346 2018-10-24 12:05:43 +0900

r65340 の wercker.yml での test-all で除外するテストは --jit-wait の指定時にも除外するようにしています。

k0kubun: r65347 2018-10-24 18:52:01 +0900

wercker.yml でやっぱり --jit-wait つきのほうの test-all を test/ruby & test/testunit とそれ以外の2回に分けて実行するようにしています。

k0kubun: r65348 2018-10-24 19:29:39 +0900

wercker.yml でさらに Test::Unit 自体の parallel 機能のテストを --jit-wait オプション付きの時に除外するようにしています。

svn: r65349 2018-10-24 19:29:40 +0900

r65348 の新規追加ファイルの svn property 設定。

nobu: r65350 2018-10-24 19:38:39 +0900

iseq_peephole_optimize() で VM 命令の最適化で newarray の operand が 1 だった時の pop 命令の挿入箇所が間違ってた不具合を修正しています。 [ruby-core:89536] [Bug #15245]