ruby-trunk-changes r64274 - r64292

今日は MJIT のソースコードのファイルを分離する変更などがありました。

kazu: r64274 2018-08-10 21:36:30 +0900

Numeric#step の実装の num_step() の r64205 でコメントアウトされた RETURN_SIZED_ENUMERATOR() がもう不要なので削除しています。

kazu: r64275 2018-08-10 21:36:31 +0900

r64265 で追記した Process.groups の rdoc 用コメントの uniq を呼んだほうがいいよというサンプルコードで uniq が unique になってたので修正しています。

k0kubun: r64276 2018-08-10 21:55:18 +0900

appveyor.yml の Slack への通知設定で pull request のブランチのテストの失敗は通知しないようにしているそうです。独特な設定の書き方。

naruse: r64277 2018-08-11 06:31:25 +0900

r64269 に続いて FreeBSD で失敗する rubyspec の socket のテストをファイル単位で削除しています。

k0kubun: r64278 2018-08-11 08:32:32 +0900

RubyVM::InstructionSequence の load/to_a を GC.stress = true の環境下でやるテストのタイムアウトを伸ばしています。mswin の CI ではまだ時間がかかるため。

svn: r64279 2018-08-11 08:32:33 +0900

version.h の日付更新。

k0kubun: r64280 2018-08-11 12:38:38 +0900

vm_call_iseq_setup_normal() から rb_callable_method_entry_t と rb_iseq_t の取り出し部分以降を vm_call_iseq_setup_normal_internal() という関数に切り出して MJIT のコンパイル時に生成するソースコードの同様の処理をこの関数の呼び出しにするように変更しています。 inline 関数なので展開されてコストにはならないはず。

k0kubun: r64281 2018-08-11 12:50:42 +0900

vm_caller_setup_arg_block() で引数に受け取った struct rb_calling_info のメンバーを上書きしていたのを戻り値で返して呼び元でメンバーに再代入するようにリファクタリングしています。MJIT が生成するコードで戻り値になる blocks_handler が欲しいためだけに rb_calling_info を渡さないといけなかったので無駄を省くためみたいです。

k0kubun: r64282 2018-08-11 13:22:14 +0900

tool/downloader.rb で Errno::ETIMEDOUT や SocketError の他 HTTP レスポンスのステータスが 502 または 503 の時にもリトライするようにしています。

k0kubun: r64283 2018-08-11 14:33:15 +0900

MJIT が生成するソースコードで ISeq が例外処理がない場合に pc の更新を省略してたのをやめています。実行中の行番号が合わなくなる不具合を回避するため最適化をあきらめたということみたいです。この前のコメントも消したほうがいいのでは。

k0kubun: r64284 2018-08-11 14:37:17 +0900

と思ったら r64283 で分岐を消した pc の変更部分のコメントも修正されていました。

k0kubun: r64285 2018-08-11 16:57:58 +0900

mjit.c から大部分のコードを mjit_worker.c と mjit_internal.h というファイルに分離しています。 MJIT の worker 用の thread では GC を走らせる可能性がある関数などは呼んではいけないので、それがわかりやすくなるように分離したということみたいです。

svn: r64286 2018-08-11 16:57:59 +0900

r64285 で新規追加されたファイルの svn property 設定。

k0kubun: r64287 2018-08-11 17:07:13 +0900

mjit.c の pch_status という extern している変数に mjit_ という prefix を追加しています。また r64285 で分離したヘッダ mjit_internal.h から mjit_worker.c でしか使っていないマクロの定義を移動しています。

k0kubun: r64288 2018-08-11 17:34:25 +0900

mjit.c の valid_class_serials という変数に mjit_ という prefix を追加し、mjit_valid_class_serial_p() を mjit.c から mjit_worker.c に移動しています。この関数を worker thread でしか使われてなかったようです。

k0kubun: r64289 2018-08-11 18:37:14 +0900

r64285 で分離した mjit_worker.c ですが普通にコンパイルするのではなくて mjit.c から #include で取り込むようにしています。ソースファイルをまたいで変数を参照するためシンボルを公開しないといけなくて、それを避けるためだそうです。 vm 系のソースもそんな感じのことしてますね。

k0kubun: r64290 2018-08-11 18:48:07 +0900

r64285 で mjit_worker.c を分離したためいくつかの変数に mjit_ の prefix を追加しましたが、r64289 で #include でソースファイルを取り込むように変更したためまた prefix を外しています。

k0kubun: r64291 2018-08-11 18:58:20 +0900

mjit_worker.c の一部のマクロや変数の宣言位置を前のほうに移動しています。

k0kubun: r64292 2018-08-11 19:05:56 +0900

r64289 で mjit_worker.c を mjit.c に #include でとりこむようにしたのでさらに一部の変数の mjit_ の prefix を削除して extern してた変数を static に戻しています。