ruby-trunk-changes 2020-06-22

今日は MJIT の inline 展開の条件の変更や標準添付ライブラリ webrick や fileutils のファイルパスの Encoding まわりの修正の続きなどがありました。

[aec8e6d379] Yusuke Endoh 2020-06-21 14:14:30 UTC

538276aa777e4abfb6eaf55466043a3752fbb8ec で MJIT のテストで RHEL で SEGV するものを skip するようにしたやつは正確には s390x アーキテクチャ上の RHEL だったそうで s390x であることのほうを条件に変更しています。

[d9f608b686] Takashi Kokubun 2020-06-21 17:27:04 UTC

7561db8c009bb79a75024fa4ed0350bfb3d0626c で導入した Primitive.attr! での inline 指定により MJIT 時のメソッド inline 化に CHECK_CANARY() による VM stack の消費量チェックを対応させるための変更のようです。 https://github.com/ruby/ruby/pull/3244

[0e3ead344c] git 2020-06-21 17:27:23 UTC

version.h の日付更新

[54ad2bd6d0] Nobuyoshi Nakada 2020-06-21 21:17:12 UTC

VM_CHECK_MODE が 0 の時(通常ビルド)時のマクロ SETUP_CANARY() および CHECK_CANARY() の定義を空っぽでなくなにもしない if 文として定義して引数が未参照になる警告を抑制しようとしています。

[eed4aaa0bf] Takashi Kokubun 2020-06-21 23:16:10 UTC

標準添付ライブラリ net/http のテストでも MJIT 有効化時に読み込みのタイムアウトを伸ばすようにしています。

[7658a0f8fe] Takashi Kokubun 2020-06-22 06:21:47 UTC

eed4aaa0bf8aa3109936c4276a71c0cdab4d54d6 の net/http のテストでの MJIT 有効化時のタイムアウト延長を 5倍からさらに 10倍にまで増やしてみています。

[8838600c1e] Takashi Kokubun 2020-06-22 07:17:09 UTC

benchmark/ サブディレクトリ内の YAML ファイル形式のベンチマークで type の指定にサブディレクトリ benchmark/lib が $LOAD_PATH に追加されてる前提で runner が指定されてたのをやめています。 make benchmark ターゲット利用時に -I オプションで指定されてるのですが、このターゲットなしで benchmark-driver のコマンドを直接指定したい時もあるので、ということのようです。

[faf93e4545] Takashi Kokubun 2020-06-22 07:20:30 UTC

8838600c1e7bcf913cbdc43caee50baa1c65cd4a に追随して benchmark/ の YAML 形式のベンチマークスクリプトのコメントに書かれてる Usage に RUBYOPT=-Ibenchmark/lib を指定するように書かれてたのを削っています。

[4c5780e51e] Takashi Kokubun 2020-06-22 07:54:27 UTC

benchmark/ の MJIT 関係のベンチマークから warmup 用の処理を benchmark/lib/benchmark_driver/runner/mjit.rb という runner を追加してここに追加しています。

[48d7ebe6fc] Kazuhiro NISHIYAMA 2020-06-22 08:05:33 UTC

fileutils のテストで File.symlink が使える環境かどうかの判定に src にも dest にも空文字列を指定して File.symlink を呼んでみていたのを一時ディレクトリを作成してそこでちゃんと名前のある symlink を作る方法に修正しています。空文字列で File.symlink ってどうなるんじゃろ、と思ったら手元の環境では Errno::ENOENT でした。

[d231b8f95b] Kazuhiro NISHIYAMA 2020-06-22 08:07:49 UTC

標準添付ライブラリ fileutils で Windows 環境ではファイル名の Encoding を UTF-8 固定にしていたのを、パス名の Encoding が UTF-8 と互換でなかった場合は path 名の Encoding をそのまま使うように修正しています。

[61743f0c83] Kazuhiro NISHIYAMA 2020-06-22 08:31:07 UTC

標準添付ライブラリ webrickWEBrick::HTTPServlet::DefaultFileHandler のテストでファイル名がマルチバイト文字だった時のテストで、DocumentRoot だけでなく DirectoryIndex にもマルチバイト文字を含むファイルパスを渡した場合もテストするようにしています。

[3238641750] Kazuhiro NISHIYAMA 2020-06-22 08:37:37 UTC

標準添付ライブラリ webrickWEBrick::HTTPServlet::DefaultFileHandler の変更なんですが、基本的にはリファクタリングのようにみえます。req.path_info をディレクトリごとに分けた後の set_filesystem_encoding を一括でせずに while ループで順次行なうようにしているので途中で break した時に余計な set_filesystem_encoding が呼ばれないというのがあるけど。

[78352fb52e] Takashi Kokubun 2020-06-22 08:44:11 UTC

MJIT でのメソッドの inline 化の条件を判定する関数のひとつ has_valid_method_type() で callcache に乗ってるメソッド定義タイプの引数を追加して VM 命令の opt_xxx のうち opt_send_without_block 以外の命令のコンパイル時にメソッド定義が VM_METHOD_TYPE_ISEQ の時のみ callcache が不正になってた時に inline 化をキャンセルする fallback を使うようにしています。よくわからなかったのですが opt_nil, opt_not, opt_eq などの命令が callcache を埋めてしまうけど無視してもいいから、ということかな?

[7ac6c967e4] Kazuhiro NISHIYAMA 2020-06-22 09:15:21 UTC

d231b8f95b35d8a344cec4f62d7bbdf360a70e1c の標準添付ライブラリ fileutils でのファイル名の Encoding 関連の変更を revert して、テストのエラー時のデバッグ用出力を追加しています。

[6adbdb56ed] Kazuhiro NISHIYAMA 2020-06-22 09:34:24 UTC

7ac6c967e49d1e3ad46be20aca98e8f1df2c2d5bデバッグ出力を revert して d231b8f95b35d8a344cec4f62d7bbdf360a70e1c の標準添付ライブラリ fileutils の Encoding まわりの修正のリトライ? FileUtils::Entry_#join メソッドで File.join で EncodingError が発生した時に Windows 環境ではそれぞれの文字列を UTF-8 に encode してからリトライするというコードを追加しています。