ruby-trunk-changes r67315 - r67331

今日は引数がシンプルなメソッドの呼び出しの最適化やその変更の MJIT 対応などがありました。

ko1: r67315 2019-03-21 04:57:39 +0900

メソッド呼び出しの処理で、メソッドの引数が lead と optional だけだった時向けの最適化を導入しています。 lead parameters って耳慣れないなと思ったのですが(必須の引数のことはよく positional と言うので)、そういえば ruby のメソッド引数はちょっと前から `def meth(a1, a2, *middle, b1, b2)` みたいに rest 引数の後にも positional 引数を置けるようになってたんでした。すっかり忘れてた。なので lead と optional だけということは `def meth(a, b=nil)` のような感じで省略可能な引数はあるけど rest 引数やキーワード引数はないっていうものですね。実装はメソッド呼び出しの引数準備をしてる vm_callee_setup_arg() で仮引数の種類をチェックして lead と optional だけかチェックし、その時に専用の簡易化した vm_call_iseq_setup_normal_opt_start() という関数を利用するようにしています。コミットログにあるベンチマークによると面白いのは、vm_call_iseq_setup_normal_opt_start() を導入しなくても lead と optional だけかチェックして setup_parameters_complex() の呼び出しを抑制するだけでも効果がある(というかむしろこちらのほうが効果が高そう)ということでした。

svn: r67316 2019-03-21 04:57:43 +0900

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

svn: r67317 2019-03-21 04:57:44 +0900

version.h の日付更新。

ko1: r67318 2019-03-21 05:26:21 +0900

r67315 の変更で警告除去のため明示的なキャストを追加しています。

ko1: r67319 2019-03-21 05:37:03 +0900

r67315 の lead と optional の引数のみかチェックしてるところでキーワード引数の展開の有無のチェックは外の分岐でチェック済みなので削っています。

hsbt: r67320 2019-03-21 08:32:11 +0900

Enumerator::Lazy の rdoc 用コメントを全体的に追加しています。 [ruby-core:91046] [Misc #15529]

kazu: r67321 2019-03-21 12:24:59 +0900

.editorconfig を整理して重複してた設定を削除したりしています。

k0kubun: r67322 2019-03-21 13:47:59 +0900

MJIT のテストで mswin 向けに調査のためのメッセージ出力を追加しています。

k0kubun: r67323 2019-03-21 13:49:45 +0900

r67322 で追加した MJIT のテストでのデバッグメッセージを作ってるところにコメントを追加しています。

k0kubun: r67324 2019-03-21 14:30:27 +0900

azure-pipelines.yml の vs2017 のビルド時に vcpkg で openssl, readline, zlib などの依存パッケージをインストールする時に何度かリトライするようにしています。

k0kubun: r67325 2019-03-21 14:44:26 +0900

r67322 の MJIT のテストのデバッグメッセージで JIT コンパイルのためにコンパイラを起動した時の標準エラー出力では情報が足りなかったので標準出力も取得するようにしています。

mame: r67326 2019-03-21 14:59:14 +0900

backtrace 内で to_enum で Enumerator 化されたメソッドの行番号がずれていたのを修正しています。 int のところに INT2FIX() で変換したものを入れてましたね。 [ruby-core:91911] [Bug #15719]

svn: r67327 2019-03-21 14:59:16 +0900

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

k0kubun: r67328 2019-03-21 14:59:57 +0900

r67315 の最適化で導入した lead と optional の引数だけか確認する関数 rb_iseq_only_optparam_p() を static 関数として宣言するように修正しています。 mswin での MJIT のビルドに影響があったみたいです。

k0kubun: r67329 2019-03-21 15:25:09 +0900

mjit_compile.c と vm_insnhelper.c で引数の実引数の情報をチェックする部分を vm_call_iseq_optimizable_p() という関数に切り出して vm_insnhelper.h に定義しています。

k0kubun: r67330 2019-03-21 15:48:00 +0900

mjit_compile.c の inlinable_iseq_p() という関数で仮引数の lead parameter 数と実引数の数のチェックを追加しています。

nobu: r67331 2019-03-21 21:01:36 +0900

r67311 と同様に Array#max と Array#min の rdoc 用コメントでもモジュール名を <code> タグでマークアップしてたのをやめて cross reference が有効になるようにしています。