Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2018-08-16 ruby-trunk-changes r64379 - r64394

[][]ruby-trunk-changes r64379 - r64394

今日は timer thread 廃止後の spurious wakeup 対策とか Enumerator::Lazy の #uniq, #grep_v のメソッドチェイン時の最適化などがありました。

nobu: r64379 2018-08-15 21:53:45 +0900

r64378 の続きで SET_NON_BLOCKING_FAILS_ALWAYS が真の時に未使用な変数宣言も削除して、到達できたいところに UNREACHABLE マクロを置くようにしています。

akr: r64380 2018-08-15 23:24:44 +0900

time.c のうるう秒処理する gmtimew_noleapsecond() で leap_year_yday_offset および common_year_yday_offset というテーブルを参照していたのを mon および mday を lookup する common_year_mon_of_yday, leap_year_mon_of_yday, common_year_mday_of_yday, leap_year_mday_of_yday というテーブルを新規に定義してこれを使うようにリファクタリング(?)しています。

normal: r64381 2018-08-16 03:56:34 +0900

r64204 で ripper のテストで Process.setrlimit でメモリ上限を制限するテストで MJIT が有効な時は上限を引き上げてましたが、まだ足りなかったらしくもうちょっと増やしています。

svn: r64382 2018-08-16 03:56:35 +0900

version.h の日付更新。

nobu: r64383 2018-08-16 09:05:08 +0900

r64239 の rubyspec の socket のテストの FreeBSD 向けの修正を macOS でも適用するようにしています。

nobu: r64384 2018-08-16 09:13:47 +0900

enumerator.c の id_lazy はもう未使用になっていたので削除しています。

nobu: r64385 2018-08-16 09:58:21 +0900

r56185 でやってた Enumerator::Lazy のメソッドチェインした時の Proc オブジェクト配列に詰めてメソッド呼び出しを迂回して直接 rb_proc_call_with_block() を呼ぶようにした最適化を Enumerator::Lazy#uniq と #grep_v でも対応しています。 r56185 の後で追加されたメソッドだから漏れてたのかな。 https://github.com/ruby/ruby/pull/1930 [ruby-core:88492] [Feature #14994]

svn: r64386 2018-08-16 09:58:22 +0900

r64385 で新規追加したベンチマークスクリプトファイルの svn property 設定。

normal: r64387 2018-08-16 12:37:14 +0900

net/imap のテストで処理中に Interrupt を raise する Thread を立てるテストで協調のためのループ部分で止まってる場合に後始末で Thread#kill で殺すようにしています。Mutex#sleep で待ってる Thread が MJIT が有効な時に意図しない wakeup することがあるためにループ部分で待ち続ける可能性があるそうで、たぶん元々そういう可能性はあったんだと思うけど timer thread 廃止も関係して表面化したんだろうなぁ。大丈夫かなぁ…。

normal: r64388 2018-08-16 17:26:51 +0900

thread_pthread.c の do_gvl_timer() で ubf_wakeup_all_threads() で blocking region の thread に SIGVTALRM を送信した後で処理すべきシグナルがバッファに残っていたらメインスレッドに threadptr_trap_interrupt() を呼んでいます。コミットログを読むとこの中で ubf(unblocking function) を実行させるのが目的みたいです。その前に ruby_sigchld_handler() も呼んでるから、これが確実に処理されるようにするのがメインかも?

normal: r64389 2018-08-16 17:26:56 +0900

rb_thread_wakeup_timer_thread() の引数に 0 を渡すと ubf_timer_arm() でタイマーをセットさせるようにしていましたが -1 も受け付けて -1 の時だけ ubf_timer_arm() を呼び、 0 の時は signal_self_pipe の pipe を通じて timer thread 役の thread に通知するだけに留めるようにしています。SIGVTALRM 利用を減らして spurious wakeup を減らすのが目的のようです。

normal: r64390 2018-08-16 18:16:11 +0900

thread.c の consume_communication_pipe() でシグナルの通知用の pipe から読み込む時には先に ubf_timer_disarm() でタイマーを止めてさらにシグナルが送られるのを防ぐようにしています。「もうわかったから、今やってるから!」って感じですかね。

nobu: r64391 2018-08-16 18:27:53 +0900

Makefile.in の ruby.pc と ruby-runner.h の依存関係に config.status を追加して configure しなおされた時に生成しなおすようにしています。

nobu: r64392 2018-08-16 18:46:20 +0900

macOS の時のライブラリ探索パスを指す環境変数を指定する LIBPATHENV (Linux なら LD_LIBRARY_PATH)に DYLD_LIBRARY_PATH を設定していましたが、DYLD_FALLBACK_LIBRARY_PATH というのを指定するようにしています。チケットによると DYLD_LIBRARY_PATH を直接設定すると pkg-config(1) が探索に失敗してしまうそうです。 [ruby-core:88487] [Bug #14992]

naruse: r64393 2018-08-16 19:50:53 +0900

rubyspeck の socket のテストで solaris で失敗しているものを platform_is_not の guard に追加して Solaris 10 での実行を抑制するようにしています。

kazu: r64394 2018-08-16 21:14:11 +0900

appveyor.yml の不要になったコメントを削除しています。

2018-08-15 ruby-trunk-changes r64358 - r64378

[][]ruby-trunk-changes r64358 - r64378

今日は Hash をキーワード引数に展開して渡す時のキーが Symbol 以外受け付けないようにする仕様変更や、timer thread 廃止の変更の追加修正やテスト追随などがありました。

nobu: r64358 2018-08-14 20:58:17 +0900

Hash をキーワード引数に展開して渡す時に文字列のキー(というか Symbol 以外のキー)は ArgumentError を発生させるように仕様変更しています。 https://twitter.com/yukihiro_matz/status/1022287578995646464

normal: r64359 2018-08-15 02:07:36 +0900

rubyspec の IO のテストのための拡張ライブラリで errno に依存しているところで errno を設定できるインタフェースを追加して回避するようにしています。うーん、これはテストが悪いのかな……。なんか C API の互換性が壊れているというわけではないのかな。

svn: r64360 2018-08-15 02:07:37 +0900

version.h の日付更新。

normal: r64361 2018-08-15 07:06:40 +0900

r64357 の Solaris で timer thread を使うようにしたのは r64359 の rubyspec の修正(?)で不要になったそうなので revert しています。

normal: r64362 2018-08-15 07:59:57 +0900

r64238 でテスト時の一時ファイルの leak のチェックで Tempfile のファイルが実際に削除されてるかどうかをチェックに入れてたのは revert しています。これも次の(r64362 の)修正で不要になるので、とのこと。

normal: r64363 2018-08-15 08:00:02 +0900

r64362 で revert したテスト時の Tempfile の消し忘れ検出で File.exist? もチェックするようにしたのは、webrick のテストで Tempfile で作ったファイルを rename してたせいらしくて、正常時のみ rename して例外発生時は後始末するように修正しています。 [ruby-core:88477]

k0kubun: r64364 2018-08-15 08:23:44 +0900

appveyor.yml の MinGW 版のビルド時の test-all に V=1 と TEST_EXCLUDES の指定を追加しています。よくわかりませんが最初から TEST_EXCLUDES がなにか設定されている? かなにかで全テスト が skip されているみたいなのでそれを調査するためみたいです。

k0kubun: r64365 2018-08-15 10:40:57 +0900

readline のテストと非常に大きな文字列を環境変数にセットするテストで AppVeyor 上で MinGW 版の時には skip するようにしています。

k0kubun: r64366 2018-08-15 10:55:09 +0900

r64365 の ENV のテストのほうは r64293 で Windows での環境変数のサイズ制限が最近のバージョンではなくなってるのに対応した時に MinGW も制限があるほうに分岐してたせいみたいなのでそこを修正して skip はしないように戻しています。

nobu: r64367 2018-08-15 11:05:20 +0900

io_spec_rb_io_wait_readable() の宣言に NORETURN() を使って処理が戻ってこないことを明示するようにしています。

nobu: r64368 2018-08-15 11:15:13 +0900

appveyor.yml のコマンドの一部を sh -c 経由で実行しないようにしています。詳しくは書いてありませんが msys の sh にはなにか問題があるらしい。

k0kubun: r64369 2018-08-15 12:03:18 +0900

r64365 の AppVeyor 上での MinGW で通らないテストのために readline のテストの setup で環境変数 APPVEYOR をみてスキップさせてたやつで teardown のほうも無視させないといけなかったので同じチェックして return させるようにしています。

nobu: r64370 2018-08-15 13:10:19 +0900

r64364 の AppVeyor 上での MinGW での make test-all に TEST_EXCLUDES 変数を明示するようにしたのを revert して、set MSYS_NO_PATHCONV=1 という変数設定をしておくようにしています。よくわかりませんが msys がパスを勝手に変換してしまうのを抑制するものみたいですね。

normal: r64371 2018-08-15 13:32:36 +0900

timer thread の廃止で blocking region に入ってる thread を起こすためにやっぱり timer thread を使うっていう環境で ubf_timer_pthread_create() を呼ぶ前に UBF_TIMER の値をチェックする分岐を明示的に入れています。定数マクロなので最適化で消えるはずですがコードの読みやすさのためとのこと。 [ruby-core:88475] [Misc #14937]

normal: r64372 2018-08-15 13:32:41 +0900

thread_pthread.c の変数 timer_thread_pipe を signal_self_pipe に改名しています。この pipe って timer thread 役の thread に通知するための pipe だと思ってたんだけど違うのかな。 [ruby-core:88475] [Misc #14937]

normal: r64373 2018-08-15 13:32:46 +0900

rb_timer_disarm() などの rb_timer_xxx() の関数群を ubf_timer_disarm() のように ubf_timer_xxx() に改名しています。 export しないので rb_ という prefix を使わないようにしています。 [ruby-core:88475] [Misc #14937]

k0kubun: r64374 2018-08-15 13:51:10 +0900

r64355 で謎の IO.select を追加して timer を抑制して対処していた、timer thread 削除を入れたら通らなくなった fiddle のテストですが、これは MJIT とシグナル処理の変更の関連があるみたいで、r64355 で --jit-wait オプションを指定した実行では逆にハングアップしてしまうみたいなので、とりあえず MJIT が有効だったら skip するようにしています。

normal: r64375 2018-08-15 14:31:31 +0900

構造体 native_thread_data_t の ubf_list を共用体にして ubf と gvl という別の名前を持たせるようにしています。両方ともこれまでと同じ struct list_node なので実体は変更ありませんが、読みやすさのためにどっちの用途で使われてるのかを明示しようとしているのかと。 [ruby-core:88475] [Misc #14937]

normal: r64376 2018-08-15 14:54:41 +0900

構造体 rb_thread_t のフラグ類を bitfield にして既存の bitfield とまとめて構造体サイズを節約しています。久しぶりの構造体ダイエット

normal: r64377 2018-08-15 16:16:55 +0900

thread_pthread.c の gvl_acquire_common() から gvl.timer が無効な時に timer thread 代わりの thread が完全に wait せずにタイムアウトつきで定期的に起きるようにする処理を do_gvl_timer() という関数名で切り出すリファクタリング。 また UBF_TIMER マクロの定義部分のコメントで blocking region の thread を定期的に起こす理由を詳細に追加しています。 [ruby-core:88475] [Misc #14937]

nobu: r64378 2018-08-15 20:01:30 +0900

rubyspec の IO の C API テスト用の拡張ライブラリで SET_NON_BLOCKING_FAILS_ALWAYS というマクロが真だと set_non_blocking() という関数が常に return -1 するようになっているため、絶対に通らないパスがあって、そこを preprocessor の分岐で消すようにしています。最適化によってコンパイラが unreachable と判定して警告が出てたのかな。

2018-08-14 ruby-trunk-changes r64337 - r64357

[][]ruby-trunk-changes r64337 - r64357

今日は Module#method_defined? に省略可能な inherit 引数を追加する変更や、timer thread を廃止する変更のリトライなどがありました。

usa: r64337 2018-08-13 21:42:03 +0900

Module#method_define? に省略可能な引数 inherit を追加して継承したメソッドを含めるかどうかを指定できるようにしています。理路整然としたチケットだなぁ。 [ruby-core:88140] [Feature #14944]

svn: r64338 2018-08-13 21:42:04 +0900

r64337 の行末の空白を除去しています。

usa: r64339 2018-08-13 21:42:55 +0900

tool/redmine-backporter.rb の show コマンドで表示するメッセージを組み立てるための StringIO に UTF-8 の Encoding を設定しておくようにしています。メッセージ内容によっては Encoding 変換のエラーが起きてたみたいです。

kazu: r64340 2018-08-13 22:27:47 +0900

r64337 の Module#method_defined? の省略可能引数の追加を revert しています。CI が失敗してたのかな?

kazu: r64341 2018-08-13 22:27:49 +0900

r64337 の Module#method_defined? の引数追加とその revert と絡んでるとだと思いますが、拡張ライブラリを使ったテストの test/-ext-/test_notimplement.rb で Bug.method_defined? のテストを追加しています。CI の調査用かな?

k0kubun: r64342 2018-08-13 22:46:06 +0900

appveyor.yml で matrix と for の使いかたが間違ってたそうなのでその修正と、version という項目の指定を追加しています。MinGW でのテストも追加しようとしているそうです。

usa: r64343 2018-08-13 22:48:27 +0900

r64340 で revert された r64337 を再適用して me->def->type が VM_METHOD_TYPE_NOTIMPLEMENTED が明示的に設定されてた時の対応を追加しています。

kazu: r64344 2018-08-13 22:50:48 +0900

r64341 で追加したテストはテスト用拡張ライブラリに Bug::NotImplement という Module を追加してこちらを使うように修正しています。

usa: r64345 2018-08-13 23:29:21 +0900

Module#method_defined? や {private,protected}_method_defined? のテストを追加しています。

usa: r64346 2018-08-13 23:33:06 +0900

r64337 の Module#method_defined? の引数追加について NEWS に追記しています。

kazu: r64347 2018-08-13 23:54:32 +0900

r64346 の typo 修正。

k0kubun: r64348 2018-08-14 00:29:40 +0900

appveyor.yml の matrix に MinGW でのビルドを追加しています。

svn: r64349 2018-08-14 00:29:41 +0900

version.h の日付更新。

k0kubun: r64350 2018-08-14 01:03:47 +0900

r64348 の追加修正。 MinGW での gdbm のビルドのため mingw-w64-x86_64-gdbm というパッケージ? をインストールするようにしています。

naruse: r64351 2018-08-14 04:12:23 +0900

r64331 や r64332 で addr2line.c で libz が使える時だけ圧縮に対応するようにしていましたが、FreeBSD 11.0 では libz はあっても ELF の圧縮形式? には未対応のため、ELFCOMPRESS_ZLIB というマクロも追加でチェックしてこれがないと圧縮されたデバッグセクションはサポートしないようにしています。

normal: r64352 2018-08-14 06:34:20 +0900

timer thread の削除を r64203 で一旦あきらめて revert していましたが、またリトライするみたいです。とりあえずこのコミットは r64203 を revert して元の状態に戻しているだけみたいです。続く変更で不具合を修正するとのこと。 [ruby-core:88360] [Misc #14937]

normal: r64353 2018-08-14 06:34:24 +0900

r64352 に続いて timer thread の廃止の修正。 GVL 解放してブロックする処理に入る前にシグナルを受信してしまうと割り込みチェックの前にブロック処理に入って起床しなくなるという問題を解決するための修正のようです。 まず Thread のなかで timer thread としての役割を受け持つ thread で、利用可能であれば timer_settime(2) システムコールを用いた定期的なシグナル送信を行うようにしています。また gvl_yield() 時に常に blocking 中のスレッドを起こすようにしています。なんか前も思いましあが Thread が多い時には timer thread がないかわりに全スレッドが定期的に起こされるので若干負荷が上がりそうな気がするんですがどうなんでしょう。 [ruby-core:88360] [Misc #14937]

normal: r64354 2018-08-14 07:19:54 +0900

r64353 の再修正。 rb_timer_arm() で timer_settime(2) を使ったタイマーセットするところで、既に他の thread でも呼ばれていたのを検出した時に異常終了してましたが、これはありえるので許容するようにしています。 [ruby-core:88360] [Misc #14937]

normal: r64355 2018-08-14 09:31:31 +0900

timer thread の廃止で拡張ライブラリ fiddle のテストが失敗していたのを謎の IO.select を追加して回避するようにしています。timer を止めるための hack だそうです。うーん? なんか怪しくなってきたぞ。 [Bug #14968] [ruby-core:88360] [Misc #14937]

normal: r64356 2018-08-14 11:24:37 +0900

r64353 の timer thread の廃止の修正で timer_settime() に使ってた CLOCK_MONOTONIC が Solaris 環境だとないということで、かわりに CLOCK_REALTIME を使うようにマクロ UBF_TIMER_CLOCK を導入しています。 [ruby-core:88360] [Misc #14937]

normal: r64357 2018-08-14 15:49:25 +0900

r64356 で Solaris でも timer_settime(2) を使うほうを有効にしていましたが、CI での rubyspec の失敗が解決できないので timer thread を使う方式にしています。

2018-08-13 ruby-trunk-changes r64321 - r64336

[][]ruby-trunk-changes r64321 - r64336

今日は addr2line.c でデバッグセクションが圧縮されてても対応できるようにする変更や、MJIT で addr2line.c の機能を使って行番号が取得できるように *.so の削除を遅延する変更などがありました。

k0kubun: r64321 2018-08-12 21:59:47 +0900

mark_ec_units() でループ回数を事前に計算してカウンタでループを回していましたが、終了条件で break するようにして不要な変数を削除しています。この break する条件を for 文の条件部(?)に反転して書いてもいいような。

k0kubun: r64322 2018-08-12 23:42:25 +0900

MJIT で実行時にコードをコンパイルする時のコンパイルオプションデバッグオプションに -g1 と、リンク時のオプションに --compress-debug-sections=none を指定してデバッグ情報のセクションの圧縮を無効化するようにしています。addr2line.c の処理で行番号を取得できるようにするためとのこと。

k0kubun: r64323 2018-08-13 00:00:03 +0900

MJIT で動的にコンパイルした .so ファイルをロードしてすぐ消さずに不要になった時に消すように mswin 版と同じように遅延するようにしています。デバッグ情報を取得するためみたいです。ただし実行形式が ELF の時だけなので macOS などでは無効。

svn: r64324 2018-08-13 00:00:05 +0900

version.h の日付更新。

k0kubun: r64325 2018-08-13 00:13:06 +0900

r64322 で MJIT の実行時のコンパイル時に -Wl,--compress-debug-sections=no というオプションを追加するようにしていましたが、ビルドエラーになるのを避けるため configure で使えるかチェックしてから付けるようにしています。

k0kubun: r64326 2018-08-13 00:16:00 +0900

r64325 で追加しようとするコンパイラオプションの値が no になってたので none に修正しています。

akr: r64327 2018-08-13 01:45:02 +0900

time.c の timegm_noleapsecond() という関数うるう秒チェックのため tm_yday を取得する処理が calc_tm_yday() という関数に定義されていたのでそちらを使うようにリファクタリングしています。

naruse: r64328 2018-08-13 11:56:06 +0900

r64322 で MJIT でコンパイルする時に行番号を取得するためにデバックセクションの圧縮を無効化するオプションをつけるようにしていましたが、addr2line.c の rb_dump_backtrace_with_lines() で圧縮されてても行番号が取得できるように機能拡張しています。

naruse: r64329 2018-08-13 15:05:39 +0900

r64328 の圧縮されたデバッグセクション対応を revert しています。たぶん CI が失敗したのでしょう。

nobu: r64330 2018-08-13 15:09:57 +0900

mingwcygwin 環境で Makefile の LIBRUBY_DLDFLAGS にリンカオプションを追加する時に DLDFLAGS を参照してしまってたので、これより上の LIBRUBY_DLDFLAGS の変更が無視されてたのを修正しています。また solaris の時の処理では GCC かどうかで分岐していたところを $linker_flag という変数を使って分岐なしで書くようにリファクタリングしています。

naruse: r64331 2018-08-13 15:20:12 +0900

r64328 のデバッグセクションの圧縮対応のリトライ。 zlib.h がない環境をサポートするように考慮するようにしているみたいです。なんですがついでに r64330 の configure.ac の変更も revertしてしまっているみたいですね。

naruse: r64332 2018-08-13 15:31:37 +0900

r64331 で libz がない環境では parse_compressed_debug_line() を定義しないようにして警告抑制するようにしています(多分)。

naruse: r64333 2018-08-13 16:55:43 +0900

r64331 でうっかり r64330 を巻き込んで revert してしまっていたので再適用しています。

naruse: r64334 2018-08-13 17:48:30 +0900

r64331 で(再度)追加した parse_compressed_debug_line() で正常終了時に誤って確保したメモリをエラー時の後始末の free() を実行してしまっていたのを修正しています。

k0kubun: r64335 2018-08-13 20:02:37 +0900

r64325 で MJIT の実行時コンパイルのリンカオプションデバッグセクションの圧縮を無効化するようにしたのは r64331 で addr2line.c が圧縮に対応するようにしたので不要になったため revert しています。

kazu: r64336 2018-08-13 21:22:43 +0900

標準添付ライブラリ rinda のテストで Rinda::TupleSpace の TupleBag を定期的に掃除する keeper という Thread を不要なテストでは止めておくようにしています。

2018-08-12 ruby-trunk-changes r64293 - r64318

[][]ruby-trunk-changes r64293 - r64318

今日も rubyspec の socket のテストのプラットフォーム依存の失敗の対応や MJIT の worker thread 用関数から GC を起動させないようにする修正などがありました。

nobu: r64293 2018-08-11 22:18:55 +0900

WindowsVista および Windows Server 2008 以降では環境変数に使える文字数に制限がなくなっているため _WIN32_WINNT でバージョンをチェックして制限をチェックしないようにしています。 [ruby-core:88400] [Bug #14979]

nobu: r64294 2018-08-11 22:28:40 +0900

configure の --with-winnt-version のデフォルト値を 0x501 から 0x600 に更新しています。あれ、でも Windows だと configure.ac は使われないんじゃないのかな。 win32/Makefile.sub に config.h を生成するルールがあるし。なんでここにこんなオプションがあるんだろう。

[追記]mingw 用だったようです。なるほど。[/追記]

k0kubun: r64295 2018-08-11 22:31:10 +0900

r64271 や r64278 で GC.stress = true の状態での RubyVM::InstructionSequence.load のテストのタイムアウトを伸ばしていましたが、環境変数 RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE で一律子プロセスを使うテストのタイムアウトを伸ばすのを使うようにすべきということで、ここでのタイムアウトは 30 に戻しています。

naruse: r64296 2018-08-11 22:31:43 +0900

rubyspec の socket のテストで Solaris で通せないものを platform_is_not の guard に追加しています。

naruse: r64297 2018-08-11 22:43:31 +0900

さらに rubyspec の socket のテストで Solaris 10 で通せないものにも platform_is_not を追加。このプラットフォームの指定に solaris2.10 なんて指定もできるんですね。

k0kubun: r64298 2018-08-11 23:05:34 +0900

MJIT 関係の警告を出力するのに --mjit-verbose などのオプションを考慮するように verbose() 内に分岐を追加してたのを mjit_warning() という専用の関数を追加してこっちを呼ぶように変えています。また各所で mjit_opts をチェックして fprintf(3) していたのもこの mjit_warning() を呼ぶようにリファクタリングしています。

k0kubun: r64299 2018-08-11 23:09:26 +0900

RubyVM::MJIT.pause のテストが mswin の CI で失敗しているそうで、詳細の調査のためエラー時に子プロセスの出力をメッセージに含めるようにしています。

nobu: r64300 2018-08-11 23:15:58 +0900

appveyor.yml で ver コマンドの実行を追加して Windows のバージョンを表示させるようにしています。

k0kubun: r64301 2018-08-11 23:18:55 +0900

mjit_worker.c で ruby/util.h を #include すると strdup() が ruby_strdup() という GC が走る可能性のある関数にすりかえられてしまうので #undef して、戻り値をチェックするように修正しています。mjit_worker.c の中では GC が走る可能性のある関数を呼んではいけないため。

k0kubun: r64302 2018-08-11 23:27:53 +0900

mjit_worker.c で ZALLOC() でメモリ確保していたところも calloc(3) に変更しています。対応して解放に xfree() を呼んでいたところも free(3) に変更しています。

nobu: r64303 2018-08-11 23:32:15 +0900

r64293 のテストで Windows のバージョンチェックの条件を修正しています。Windows 8 ではまだ一部制限が残っているみたいです。

k0kubun: r64304 2018-08-11 23:34:05 +0900

r64302 で mjit_worker.c で calloc(3) を使うようにしましたが、戻り値のチェックがされていなかったので、calloc() を呼んでた create_list_node() の呼び元でチェックするように修正しています。

k0kubun: r64305 2018-08-11 23:36:14 +0900

mjit_worker_c で alloca() や calloc() を呼ぶように変更したため不要になっていたキャストを削除しています。

k0kubun: r64306 2018-08-11 23:44:31 +0900

mjit.c の start_worker() 内に mjit_worker() の extern 宣言がされていましたが、mjit_worker.c が #include で取り込まれるようになって不要になっていたので削除しています。

k0kubun: r64307 2018-08-11 23:48:10 +0900

mjit.c に ruby_strdup() に置換される get_string() というマクロを定義して使っていましたがこれは削除して直接 ruby_strdup() を呼ぶようにしています。これは MJIT の worker ではなく mjit_init() からだけ呼ばれるから OK なのかな。

k0kubun: r64308 2018-08-11 23:50:21 +0900

r64250 で追加した RubyVM::MJIT.pause のテストを MJIT がサポートされてない環境ではスキップするようにしています。

naruse: r64309 2018-08-12 01:25:21 +0900

r64296 で Solaris の時に実行しないようにする rubyspec の Addrinfo.getaddrinfo のテストケースが違ってたみたいで platform_is_not ブロックでくくる位置を変更しています。

svn: r64310 2018-08-12 01:25:22 +0900

version.h の日付更新。

k0kubun: r64311 2018-08-12 08:33:36 +0900

r64276 の appveyor.yml の Slack 通知でアイコンとユーザー名をカスタマイズするようにしています。

k0kubun: r64312 2018-08-12 08:40:12 +0900

vm_insnhelper.c の vm_call_iseq_setup_normal_internal() の宣言に inline 修飾子と ALWAYS_INLINE() マクロ両方使ってて重複していたので修飾子は消しています。

nobu: r64313 2018-08-12 09:28:26 +0900

rubyspec の Socket.getifaddrs のテストで VirtualBox 内だと netmask に不正な(ip? に false を返す) Addrinfo が含まれるみたいなのでそれを除外するようにフィルタを追加しています。

k0kubun: r64314 2018-08-12 09:30:04 +0900

r64280 の MJIT 用関数リファクタリングを revert しています。理由は不明ながら CI で test-all が失敗するとのこと。

nobu: r64315 2018-08-12 13:50:14 +0900

compile.c の when_vals() およびその呼び元の compile_case() で COMPILE() がエラーを返した時のエラー処理が漏れてたので修正しています。

nobu: r64316 2018-08-12 13:50:48 +0900

compile_case() で type をチェックするのに専用のマクロ EXPECT_NODE() というマクロを利用するようにリファクタリングしています。

k0kubun: r64317 2018-08-12 15:00:31 +0900

r64282 で tool/downloader.rb で HTTP ステータス 502 や 503 はリトライするようにしましたが、リトライ回数も 3回から 6回に増やしています。 CIGitHub のアクセスが 1分間続けて 502 になったことがあったそうなので、もう少し長くリトライするようにしています。

nobu: r64318 2018-08-12 17:10:53 +0900

case 文の when 節に * で展開する式(splat)が書かれてた時の処理を when_splat() という関数に切り出して再帰的に呼び出して VM 命令で値を分解するようにする最適化。専用の関数再帰することで不要な中間オブジェクト生成を抑制するのが目的みたいですね。うーん具体的なスクリプトのサンプルとしてベンチマークが欲しいところ。 https://github.com/ruby/ruby/pull/1928 [ruby-core:88451] [Feature #14984]