ruby-trunk-changes r66971 - r66981

今日は VM の最適化のための VM 命令の leaf フラグの変更などがありました。

naruse: r66971 2019-01-31 21:58:33 +0900

addr2line.c に macOSMach-O のヘッダ情報の取得に _NSGetMachExecuteHeader() という関数を利用するようにしています。Apple の中のひとから情報提供があった模様。 -undefined dynamic_lookup というオプションつきでビルドした .dylib でも対応できるようになるそうです。

nobu: r66972 2019-01-31 23:02:30 +0900

標準添付ライブラリ fileutils で Errno::EISDIR の参照に名前空間のフルパスでなく EISDIR だけで参照していたところがあったので修正しています。うーむなぜ気がつかなかったのか、と思ったけど ensure 節の例外の指定は例外発生時しか評価されないんだっけ。テストで通ってなかったらしい。 [ruby-core:91362] [Bug #15577]

nobu: r66973 2019-02-01 10:31:34 +0900

r66972 で追加したテストはファイルの mode の sticky bit が有効な環境でないとうまく例外が発生しないのでスキップするようにしています。

svn: r66974 2019-02-01 10:31:36 +0900

version.h の日付更新。

shyouhei: r66976 2019-02-01 13:39:47 +0900

VM 用のソースコード生成用テンプレートの tool/ruby_vm/views/_leaf_helpers.erb で VM 命令の leaf フラグを rb_gvar_undef_getter と rb_gvar_readonly_setter からはずすようにしています。これらの命令は rb_warning() を呼んでいて、これは Warning.warn を呼ぶので ruby レベルのメソッドを呼ぶ可能性があるからとのこと。なるほどー。

nobu: r66977 2019-02-01 14:11:08 +0900

r63248 および r63383 の VM 命令の peephole optimization で jump+leave の命令の jump を消す最適化を revert しています。 leave 命令を移動した時に trace 命令もコピーしないと TracePoint が効かなくなることがあったので、効果のわりに複雑すぎるので最適化自体をやめるとのこと。 [ruby-core:91366] [Bug #15578]

svn: r66978 2019-02-01 14:11:14 +0900

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

nobu: r66979 2019-02-01 14:20:07 +0900

vm_trace.c に rdoc でドキュメント化するためにコメントアウトした状態で TracePint#enable の rb_define_method() の呼び出しを書いています。

shyouhei: r66980 2019-02-01 15:29:02 +0900

VM 命令の leaf フラグがいくつかの命令で指定が漏れてたので追加しています。また toregexp では leaf フラグを false に変更しています。例外発生する可能性があったため。

shyouhei: r66981 2019-02-01 16:26:39 +0900

VM 命令の leaf フラグに関連して、r64677 で追加した leaf フラグが true にもかかわらずさらに frame を積む関数呼び出したあった時に検出するため VM stack framme に canary data を埋めてるやつの検出をもっと早くするようにしています。実際に opt_regexpmatch1 で問題が発生しているみたいで、その状況を把握するために必要みたいです。