ruby-trunk-changes r65169 - r65238

今日は 70 commits もあって、Coverage の oneshot mode の追加、MJIT を無効にビルドする configure のオプションの追加、標準添付ライブラリの更新などたくさんの変更がありました。

nobu: r65169 2018-10-19 21:29:46 +0900

tool/transform_mjit_header.rb でコードを生成する時に .c ファイルに直接吐くのではなくて .h ファイルを作ってそれを #include するようにしています。そして gcc では "#pragma GCC system_header" という preprocessor の pragma を付けるようにしています。うーん system_header という pragma はそれ以降の内容をシステムの header ファイルとして扱うというものみたいで、MJIT はシステムヘッダも含むヘッダを展開したコードを含んでいるので、それらの警告とかエラー(エラーになるの?)を抑制するためというものみたいですね。

nobu: r65170 2018-10-19 21:29:47 +0900

tool/transform_mjit_header.rb でヘッダの分離する時にマクロ扱いしないようにする対象 PREDEFINED_MACRO に inline も追加しています。inline がマクロとして定義される環境もあるとのこと。

k0kubun: r65171 2018-10-19 21:31:02 +0900

configure のオプションに --disable-install-mjit-header を追加して MJIT のヘッダインストールを抑制できるようにしています。MJIT がらみでのビルドエラーへの workaround の手段を残しておくためみたいです。

k0kubun: r65172 2018-10-19 22:05:05 +0900

appveyor.yml で make test-spec 時に -fs オプションを渡すようにしています。デバッグのためみたいです。

nobu: r65173 2018-10-19 22:11:33 +0900

r65169 の tool/transform_mjit_header.rb で MJIT のヘッダに #pragma GCC system_header を付ける変更で、コードの文字列連結のほうほうをちょっと書きかえてます。code っていう変数に #pragma を追加した状態で後の処理にも渡したいってことかな。

k0kubun: r65174 2018-10-19 22:47:02 +0900

MJIT worker の cache するコンパイルしたコードの数のチェックが 1つ間違ってたのを修正しています。

k0kubun: r65175 2018-10-19 23:03:37 +0900

RUBY_FORCE_TEST_JIT という環境変数で MJIT のテストの実行有無を指定するチェックを削っています。主にサポートしているプラットフォームの多くで MJIT が動くようになったので常に MJIT のテストを実行するようにしています。

k0kubun: r65176 2018-10-19 23:08:45 +0900

r65175 で削除した JITSupport.supported? を使ってるところが残ってたので削除しています。

k0kubun: r65177 2018-10-19 23:19:19 +0900

同じく JITSupport.supported? を使ってるところがまだ残っていたので削除しています。

k0kubun: r65178 2018-10-19 23:26:29 +0900

r65175, r65176, r65177 で MJIT のテストの skip を削ってましたが、コンパイラicc の時はサポートしてないのでこの時は除外するという判定方法で復活させています。

k0kubun: r65179 2018-10-20 00:08:55 +0900

RubyVM::MJIT.pause で worker thread の停止を待つときに --jit-max-cache オプションの指定によるキャッシュサイズのチェックも追加しています。テスト時の hang up を避けるため。 [ruby-core:88841] [Bug #15071]

svn: r65180 2018-10-20 00:08:57 +0900

version.h の日付更新。

nobu: r65181 2018-10-20 00:24:42 +0900

.travis.yml の build matrix の 32bit 版 Linux の環境のパッケージインストールを addons.apt.config を利用するようにしています。

normal: r65182 2018-10-20 05:14:41 +0900

rb_sigwait_sleep() で時間の指定に struct timespec のかわりに rb_hrtime_t を引数に受け取るように変更しています。

normal: r65183 2018-10-20 05:56:10 +0900

構造体 rb_execution_context_t の raised_flag と method_missing_reason の型を変更して構造体サイズを小さくしています。

stomar: r65184 2018-10-20 06:26:15 +0900

Array#difference の rdoc 用コメントの修正。

stomar: r65185 2018-10-20 06:35:51 +0900

Array#concat, Array#union, File.chown, File.utime, File.lutime, String#concat, String#prepend などの rdoc 用コメントで call-seq の記法の修正。

stomar: r65186 2018-10-20 06:37:04 +0900

NEWS ファイルの文法などの修正。

k0kubun: r65187 2018-10-20 10:00:37 +0900

appveyor.yml で --subprocess-timeout-scale の値を大きくしてタイムアウトを伸ばしています。

k0kubun: r65188 2018-10-20 10:10:09 +0900

拡張ライブラリ win32ole のテストでタイムアウトするので exponential backoff で sleep 時間を伸ばしながら待つ間に WIN32OLE_EVENT.message_loop を呼び出してメッセージのディスパッチを促すようにしています。

suke: r65189 2018-10-20 11:24:21 +0900

win32ole のテストで ADODB.Connection を使うようにしてたところを System Monitor Control を使うように変えてみています。 AppVeyor の MinGW 上で ADO は使えなかったらしいです。

nobu: r65190 2018-10-20 11:49:18 +0900

Complex#** の実装で引数が整数の時に中間オブジェクトの生成を抑える最適化。

svn: r65191 2018-10-20 11:49:23 +0900

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

hsbt: r65192 2018-10-20 11:51:09 +0900

rubygems の Gem::SafeYAML で Psych のバージョンが 3.1.0.pre1 以降だったら YAML.safe_load の whitelist_classes キーワード引数を利用するようにしています。

hsbt: r65193 2018-10-20 13:25:04 +0900

拡張ライブラリ psych に upstream から 3.1.0.pre2 をマージしています。

yui-knk: r65194 2018-10-20 13:41:19 +0900

RubyVM::AST.parse と RubyVM::AST.parse_file の rdoc 用コメントで parse error 時に例外が発生するように修正されたのを反映させています。

mame: r65195 2018-10-20 14:33:04 +0900

拡張ライブラリ coverage に oneshot mode というのを追加しています。Coverage.start メソッドのオプションに :oneshot_lines を追加して、これが指定された時はある行が 1回以上実行されたかどうかだけ記録して回数は記録しないようにしています。つまり1度実行されると ISeq のフラグが落とされるのでパフォーマンスへ与える影響が小さくてすむということですね。なるほどー。
また Coverage.result にも :stop と :clear というオプションを追加して、coverage 収集の停止やリセットを抑制できるようにしています。 [ruby-core:88628] [Feature #15022]

svn: r65196 2018-10-20 14:33:13 +0900

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

svn: r65197 2018-10-20 14:33:13 +0900

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

yui-knk: r65198 2018-10-20 14:33:37 +0900

parse.y で不要になってた構造体 struct ripper_args の定義を削除しています。

mame: r65199 2018-10-20 14:44:12 +0900

rb_iseq_trace_flag_cleared() の引数 pos の型を int から size_t に変更しています。clang での型変換の警告の抑制のため。

mame: r65200 2018-10-20 14:44:14 +0900

thread.c で rb_clear_coverages() などの coverage 関係の関数の定義がなぜか #if defined(HAVE_WORKING_FORK) という分岐の中に入ってたので外に出しています。 Windows 版で関数が未定義になってビルドエラーになってたとのこと。

naruse: r65201 2018-10-20 15:18:41 +0900

addr2line.c の DWARF フォーマットから行番号を得る処理で icc の DWARF4 に対応しています。ヘッダに項目が増えてたようです。

naruse: r65202 2018-10-20 15:35:25 +0900

addr2line.c の DWARF の読み取りで ELF 形式だけでなくて macOSMach-O もサポートするようにしています。

naruse: r65203 2018-10-20 15:45:51 +0900

r65202 で ELF 形式の時の読み込みを壊していたのを修正。

ko1: r65204 2018-10-20 15:53:00 +0900

configure にオプション --disable-mjit を追加して、これで MJIT 無効化してビルドすると完全に MJIT の機能をオフにしてビルドできるようにしています。コマンドラインの --jit-xxx オプションも警告だけ出す対応はして無視するようにしています。

svn: r65205 2018-10-20 15:53:11 +0900

r65204 の mjit_compile.c のファイル末尾に改行がなかったのを修正。

naruse: r65206 2018-10-20 15:56:51 +0900

addr2line.c の parse_debug_line_cu() にて header_length という変数は精度が必要なので unsigned int から unsigned long に変更しています。

hsbt: r65207 2018-10-20 16:03:55 +0900

標準添付ライブラリ fileutils に upstream からマージしています。また fileutils.gemspec は lib/fileutils/fileutils.gemspec に移動して version 番号用のファイルも分離して標準的な gem の構造に近付けています。

svn: r65208 2018-10-20 16:03:56 +0900

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

hsbt: r65209 2018-10-20 16:21:14 +0900

tool/sync_default_gems.rb で fiddle を upstream の repo と動機する時に最後に拡張ライブラリの掃除をするようにしています。

hsbt: r65210 2018-10-20 16:27:18 +0900

拡張ライブラリ fiddle に upstream から最新版をマージしています。 extconf.rb で ruby 本体ではなく独立した gem としてインストールする時のサポートをしています。

hsbt: r65211 2018-10-20 16:38:19 +0900

拡張ライブラリ etc に upstream から最新版をマージしています。これも extconf.rb の修正のみ。

tadd: r65212 2018-10-20 16:40:45 +0900

r65210 の fiddle の extconf.rb のメソッド名 typo を修正。

k0kubun: r65213 2018-10-20 16:43:50 +0900

vm_getivar() でインスタンス変数の取得時に inline cache へのセットを最初の1回だけにして、それ以外の場合は別の Class を klass に持つインスタンスの場合なので、ic_serial は RUBY_VM_CLASS_SERIAL_INVALID にセットして以降は inline cache を使わないようにしています。これって ISeq の同じ命令で一度別の Class で cache invalidate してしまうと同じ Class の時ももう inline cache は使わなくなるってことでしょうか。 VM と MJIT 用の worker thread との race condition を避けるための対処らしいです。

kazu: r65214 2018-10-20 16:49:34 +0900

標準添付ライブラリ drb の DRb.remove_server でインスタンス変数の @primary_server を nil にリセットするようにしています。

k0kubun: r65215 2018-10-20 16:54:34 +0900

r65213 と同様に今度は vm_setivar() でもインスタンス変数設定時の inline cache が異なる Class で使われたら invalid にする変更を入れています。

hsbt: r65216 2018-10-20 16:54:58 +0900

標準添付ライブラリ irb に upstream からマージしています。

ko1: r65217 2018-10-20 17:00:42 +0900

r65204 で追加した configure のオプション --disable-mjit/--enable-mjit を --disable-mjit-support/--enable-mjit-support に改名しています。

ko1: r65218 2018-10-20 17:06:50 +0900

test/ruby/test_rubyoptions.rb と test/ruby/test_rubyvm_mjit.rb で MJIT 関係のテストを configure 時に --disable-mjit-support を指定してビルドされた時は実行しないように早期 return するようにしています。さりげなく toplevel return が使われてますね。

ko1: r65219 2018-10-20 17:47:26 +0900

r65218 で toplevel で RbConfig::CONFIG の参照できるように test/lib/jit_support.rb で require "rbconfig" しておくようにしています。

hsbt: r65220 2018-10-20 19:05:05 +0900

r65211 の拡張ライブラリ etc の extconf.rb の更新を revert しています。ふーむなぜだろ。まあ独立した gem としての時の処理のための変更みたいなので大きな影響はないと思われます。

yui-knk: r65221 2018-10-20 19:10:46 +0900

久しぶりに NODE の位置情報の修正で、->() {...} の記法でのNODE_LAMBDA の位置情報の開始位置が -> の部分になるように修正しています。

k0kubun: r65222 2018-10-20 19:20:49 +0900

r65213 と r65215 で vm_getivar() と vm_setivar() の inline cache の扱いを変更したのを revert しています。

svn: r65223 2018-10-20 19:20:53 +0900

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

hsbt: r65224 2018-10-20 19:30:42 +0900

r65211 の etc の更新のリトライ。RbConfig.ruby が使えなかったというのが原因だったようで depend ファイルが存在しない時だけ constdefs.h の生成を実行するようにしています。

mame: r65225 2018-10-20 19:45:48 +0900

VM 命令の tracecoverage を削除して struct rb_iseq_constant_body::variable::pc2branchindex という配列オブジェクトを追加して nop 命令の trace 機構を利用して実装するようにしています。 [ruby-core:83758] [Feature #14104]

svn: r65226 2018-10-20 19:45:55 +0900

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

yui-knk: r65227 2018-10-20 19:53:31 +0900

r65227 と同様に ->() {...} の記法による NODE_SCOPE の位置情報の開始位置を引数の位置になるように修正しています。

aycabta: r65228 2018-10-20 19:57:33 +0900

doc/syntax/calling_methods.rdoc に safe navigation operator いわゆるぼっち演算子 &. の説明を追記しています。 [ruby-core:88960] [Misc #15109]

yui-knk: r65229 2018-10-20 20:06:05 +0900

r65227 の parse.y の修正でブロックの途中で変数の宣言をしてしまっていたので { } で括って新たなブロックを導入するようにしています。

aycabta: r65230 2018-10-20 20:09:34 +0900

標準添付ライブラリ net/http の rdoc 用コメントに multipart/form-data のサポートについての説明を Net::HTTPHeader#set_form を使うように更新しています。 [ruby-core:88617] [Bug #15019]

k0kubun: r65231 2018-10-20 20:21:07 +0900

mjit_worker.c の get_from_list() で linked list を辿る記法を for 文の先頭で next 変数に入れておくようにリファクタリングしています。

ko1: r65232 2018-10-20 20:27:48 +0900

r65217 で改名した MJIT をサポートするかどうかのマクロ MJIT_SUPPORT を win32/Makefile.sub で真に定義しておくようにしています。

naruse: r65233 2018-10-20 20:29:38 +0900

標準添付ライブラリ net/http の Net::HTTP#connect で TLS 接続時のデバッグ用の出力に ssl_version と暗号化方式を出力するようにしています。 https://github.com/ruby/ruby/pull/1877 [ruby-core:88554] [Feature #15009]

ko1: r65234 2018-10-20 20:35:11 +0900

r65232 の win32/Makefile.sub で定義する変数名を MJIT_SUPPORT から USE_MJIT に変更しています。 MJIT_SUPPORT は RbConfig::CONFIG のキーで Makefile の変数名は USE_MJIT でしたか。

aycabta: r65235 2018-10-20 20:47:45 +0900

File.setuid?, setgid?, sticky? などの rdoc 用コメントに引数はファイル名だけでなく IO オブジェクトでも受け付けるということを追記し、テストにも同様の使いかたのチェックを追加しています。コミットログには NEWS ファイルにも追記してるようなふうに書かれてるけど実際には変更ないですね。 [ruby-core:83111] [Bug #13972]

suke: r65236 2018-10-20 20:54:09 +0900

拡張ライブラリ win32ole のテストで OLE が利用可能か確認するメソッドを専用の module に切り出しています。

svn: r65237 2018-10-20 20:54:10 +0900

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

mame: r65238 2018-10-20 21:01:41 +0900

NEWS ファイルに r65195 の Coverage.start の :onshot_lines と Coverage.result の :stop, :clear オプションの追加について追記しています。