ruby-trunk-changes 2020-03-15

今日は stringio の Encode まわりの不具合修正や MJIT 用のデバッグ用の機能強化がありました。

[cecebf55c4] Takashi Kokubun 2020-03-15 03:38:48 UTC

コマンドラインオプション --jit-debug をつけて実行した時にダンプされる関数名を _mjit1 みたいな通し番号つきの名前でなくてファイルパスとメソッド名を含む名前をつけるようにしています。

[71f6f46bd7] git 2020-03-15 03:43:52 UTC

version.h の日付更新

[deb1c7b97d] Takashi Kokubun 2020-03-15 03:50:53 UTC

cecebf55c476ae936f3e880477dfb62149143c46 を revert しています。テストがこけたとのこと。

[6e405b2611] Takashi Kokubun 2020-03-15 03:54:38 UTC

cecebf55c476ae936f3e880477dfb62149143c46 のリトライ。 compact_all_jit_code() で新しく作った関数 sprint_funcname() に渡す引数を間違えていたようです。

[67fbc122fb] Takashi Kokubun 2020-03-15 04:03:45 UTC

5437d7c879585fbdb0c294298eb76cc563e01c69 で一時的に削除していた test/ruby/test_jit_debug.rb を再度追加しています。 6e405b26116f7fe48761fe550c58f76a0f6534a2 の修正? で通るようになったってことですかね。ただ CI ではテストクラスを定義せずに toplevel return で抜けるようにしています。

[f6a54e6e46] Takashi Kokubun 2020-03-15 07:24:15 UTC

debug counters に MJIT 用の新しいカウンタ mjit_unload_units を追加して mjit_exec_not_added_add_iseq は mjit_add_iseq_to_process と改名してMJIT 無効時に行なわないようにカウントアップする位置もちょっと変更しています。

[d79890cbfa] Takashi Kokubun 2020-03-15 09:25:46 UTC

70fd099220446e39bb80eb0bb32870ce12134619 で追加した debug counters の値を実行途中で表示する RubyVM.show_debug_counters メソッドを呼び出したらプロセス終了時のダンプを off にするようにしています。

[e257c08f2e] Jean Boussier 2020-03-12 12:55:20 UTC

拡張ライブラリ stringio で StringIO の Encoding を引数が1つだけ(文字列)渡されていたらその Encoding を利用するようにしています。あれ、これまでそうじゃなかったのかな。チケットをみると Encoding.default_internal に影響されてしまっていたという不具合のようです。 [ruby-core:96758] [Bug #16497]

ruby-trunk-changes 2020-03-14

今日は make install 前の make update-gem を明示的に実行しなくてもすむようにする変更などがありました。

[de15a26e9e] "NARUSE, Yui" 2020-03-13 13:27:54 UTC

tool/redmine-backporter.rb の done サブコマンドでローカルが git リポジトリの時(つまり 2.7 以降)のログ取得のコマンドの typo 修正。

[956e220ae2] David Rodríguez 2020-03-13 09:40:00 UTC

GitHub Actions の make check 前に bundled gems を準備するのに 289bdb64d97a4a7eb626ce6ebc4e609d4bdc0ee0 で追加した make prepare-gems を利用するようにしています。

[459670d47f] David Rodríguez 2020-03-08 09:21:18 UTC

make install の依存関係に pre-install-gem や post-install-gem を追加して make update-gem を明示的に実行しなくても良いようにしています。

[666194559f] git 2020-03-14 09:17:17 UTC

version.h の日付更新

ruby-trunk-changes 2020-03-13

今日は MJIT のメソッドキャッシュ実装変更対応の追加修正などがありました。

[289bdb64d9] Nobuyoshi Nakada 2020-03-12 13:58:04 UTC

make prepare-gems というターゲットを追加してここで bundled gems の .gem ファイルダウンロードと展開を行うようにしています。

[46f4cfb162] Nobuyoshi Nakada 2020-03-12 14:38:14 UTC

そして make update-gems が refresh-gems から切り出されたたためその前の update-bundled_gems の完了まで待つように defs/gmake.mk での依存関係の調節を修正しています。今更ながら(既に類似のことはやられている)この defs/gmake.mk での同時に実行されるターゲットによって依存関係を動的につけるのすごいな。

[768bd6e533] git 2020-03-12 15:27:40 UTC

version.h の日付更新

[00dc8c0246] Jeremy Evans 2020-03-12 22:45:03 UTC

よくわかりませんが compile.c に OpenBSD でのみ STRICT_ALIGNMENT マクロを定義する preprocessor 分岐を追加しています。

[a90117c8c9] Takashi Kokubun 2020-03-13 01:43:01 UTC

標準添付ライブラリ net/ftp のテストで test_abort_tls を MJIT が有効になっている時に skip しています。 --jit-wait オプションつきだと失敗することがあるからとのこと。

[8562bfd150] Takashi Kokubun 2020-03-13 05:21:31 UTC

rb_iseq_mark() の mjit_iseq_cc_entries() の領域を mark する処理を mjit_mark_cc_entries() という関数に切り出して mjit.c に追加しています。

[43e18c68f4] Takashi Kokubun 2020-03-13 05:23:48 UTC

8562bfd1501a69aa736ba4f699a77940b2cdd9b1 で切り出した mjit_mark_cc_entries() で body->jit_unit->cc_entries の要素を舐める時のループを回す数を子 ISeq のぶんも含めた body->jit_unit->cc_entries_size のほうを使うように修正しています。

[0cd7be99e9] Takashi Kokubun 2020-03-13 05:51:33 UTC

構造体 struct compile_status から cc_entries メンバーで call cache の位置を指すのをやめて cc_entries_index というインデックスで参照するようにしています。 4bcd5981e80d3e1852c8723741a0069779464128 の変更時に call cache の領域を root iseq に統合しましたが、ポインタで持っていると指している root iseq 内のバッファが realloc(3) で確保しなおされた時に不正な領域を指したままになってしまう可能性があったため。

[88f4ebac83] Nobuyoshi Nakada 2020-03-13 06:31:21 UTC

make gems/xxx.gem のようなターゲットで個別に bundled gem 更新できるようにしています。

ruby-trunk-changes 2020-03-12

今日は syslog のフォーマット変化へのテストの対応や Object#clone の freeze キーワード引数を init_clone メソッドに委譲する時のフラグの修正などがありました。

[c6633f21a4] Yusuke Endoh 2020-03-12 06:30:20 UTC

拡張ライブラリ syslog のテストと rubyspec で FreeBSD での syslog のフォーマットが変化してエラーになったそうなのでチェックに正規表現を使ってどっちでも通るようにしています。

[74c398b82f] git 2020-03-12 06:33:18 UTC

version.h の日付更新

[83e9d6b3f4] Nobuyoshi Nakada 2020-03-12 08:09:43 UTC

Object#clone の実装で使われる mutable_obj_clone() で init_clone メソッドを呼び出す時にキーワード引数の委譲に RB_PASS_CALLED_KEYWORDS を付けてたのを RB_PASS_KEYWORDS にしています。RB_PASS_CALLED_KEYWORDS だと rb_keyword_given_p() によるチェックでキーワード引数として渡したいのに false になっちゃう可能性があるから?

[de10631dcf] Kazuhiro NISHIYAMA 2020-03-12 10:13:24 UTC

GitHub Actions での make test-bundler の対応のため default gem の gemspec ファイル内で spec.files の設定のため git ls-files を利用しているところで標準エラー出力を /dev/null にリダイレクトするようにしています。

ruby-trunk-changes 2020-03-11

今日は MJIT のメソッドキャッシュの扱いの修正や最適化などがありました。

[2fd779fcd9] Nobuyoshi Nakada 2020-03-10 12:47:18 UTC

rubyspec OpenSSL::Config のテストに openssl のバージョンによる guard を追加しています。

[21039d9c73] Kazuhiro NISHIYAMA 2020-03-10 13:18:35 UTC

doc/make_cheatsheet.md に benchmark/README.md へのリンクを追加しています。

[bf9abc4772] Kazuhiro NISHIYAMA 2020-03-10 13:20:18 UTC

21039d9c73d3c6f735d5178c9dd89950945002c3 のリンクを GitHub へのリンクに変更しています。

[d9135743c0] Koichi Sasada 2020-03-10 15:23:56 UTC

VMDEBUG を定義した時の RubyVM.mtbl というメソッドと同様のデバッグ用メソッド RubyVM.mtbl2 を追加しています。引数のクラスの mtbl でなくその引数自体の mtbl をダンプするもの。ただ mtbl の定義(rb_define_singleton_method()) が重複してしまっていますね。

[ec78b8b62a] Koichi Sasada 2020-03-10 17:43:28 UTC

gc.c の rb_raw_obj_info() で T_IMEMO 型で imemo_ment (メソッドエントリ)の時の表示で ISeq のポインタを表示していたのを obj_info() で文字列として %s で埋め込むようにしています。

[2943ff9d44] Koichi Sasada 2020-03-10 17:45:49 UTC

b9007b6c548f91e88fd3f2ffa23de740431fa969 のメソッドキャッシュの実装の変更の修正。よくわかってないですがメソッドキャッシュをクリアする時に METHOD_ENTRY_COMPLEMENTED() が真の時の分岐を追加しています。 method entry の complement は r52614 あたりでメソッドエントリの参照数を導入して Module を include した時に参照されてるのがわかるようにするためのもので、Module の m_tbl にメソッドエントリを追加しないようにするためとのこと。 [ruby-core:97334] [Bug #16669]

[d05455d083] Koichi Sasada 2020-03-10 17:55:07 UTC

ec78b8b62a84fd57eb93d7b5de5b83ea517ad7c4 の rb_raw_obj_info での imemo_ment の表示時に obj_info() に渡す引数を VALUE 型に明示的にキャストするようにしています。

[12009fb3b9] git 2020-03-10 17:55:28 UTC

version.h の日付更新

[e0512b29aa] Takashi Kokubun 2020-03-11 05:26:22 UTC

標準添付ライブラリ net/http の Net::HTTP.get メソッドで引数のヘッダーを指定する Hash を渡せるようにしています。第1引数を URI オブジェクトにして第2引数に渡すことで使えるようですね。 https://github.com/ruby/ruby/pull/2957 [ruby-core:97444] [Feature #16686]

[de4999ef23] Takashi Kokubun 2020-03-11 05:29:39 UTC

e0512b29aa47d4b79a27b0c0356bf47ec9b4e072 の NEWS への追記の英文修正。

[da6948753e] Takashi Kokubun 2020-03-11 05:36:48 UTC

e0512b29aa47d4b79a27b0c0356bf47ec9b4e072 の rdoc 用コメントへの追加の例を修正。

[9511b4c8fa] Takashi Kokubun 2020-03-11 06:18:45 UTC

tool/ruby_vm/views/_mjit_compile_send.erb で生成する C コード内の call cache のチェックで struct rb_call_data::cc との比較をしているところは GC.compact 対策で導入されていて、call cache のオブジェクトは pin されているのでもう不要ということで削っています。パフォーマンスのためのようです。

[da4b97a0e3] Takashi Kokubun 2020-03-11 07:54:18 UTC

9511b4c8facf583073ed8ecfd3d84710565572a6 と同様に tool/ruby_vm/views/_mjit_compile_send.erb で生成する C コード内での call cache のチェックで vm_cc_valid_p() を呼ばずに生成時に呼んでおいたポインタをそのまま埋め込むようにしています。このために rb_iseq_mark() で vm_cc_cme() の結果も rb_gc_mark() を呼んで pin down しておくようにしています。

[276859e03e] Nobuyoshi Nakada 2020-03-10 14:19:50 UTC

parse.y のルールで keyword splat の引数渡しの有無の差を吸収する f_any_kwrest や p_any_kwrest といったルールを追加してルールの記述をシンプルにしています。

[f020d340f4] Nobuyoshi Nakada 2020-03-11 09:11:24 UTC

parse.y に new_nil_at() というユーティリティ関数を追加して NEW_NIL() のノード生成のコード位置の指定をシンプルに書けるようにリファクタリングしています。

ruby-trunk-changes 2020-03-10

今日は MJIT のメソッドキャッシュ実装変更への追随修正や Method#inspect の不具合修正、Float::ROUND 定数の削除や拡張ライブラリ openssl の更新などがありました。

[d019cac08a] zverok 2020-03-08 08:44:46 UTC

Time.at のタイムゾーンを指定する in キーワード引数についての rdoc 用コメントのサンプルに整数や tzinfo の TZInfo::DataTimezone のインスタンスを渡す例を追加しています。

[ecef163cf9] Jeremy Evans 2020-03-09 04:01:04 UTC

FLT_ROUNDS という C のマクロを表現した Float::ROUNDS という定数がありますが、このマクロは実際にはその時点での浮動小数点数の丸めモードを返すので定数にするのは不適切ということで e89d9f3debab353d1c5a5162752af8f201d98d49 で deprecated な定数にしていましたが、2.8(3.0?)にむけて削除しています。 [ruby-core:94139] [Bug #16044]

[e02bd0e713] Jeremy Evans 2020-03-09 14:57:16 UTC

Method#inspect がメソッドの定義クラスを表示する時に、その receiver に特異クラスが存在するとたとえメソッドの定義位置がその特異クラスでなくてもその特異クラスが表示されてしまっていた不具合を修正しています。 [ruby-core:91570] [Bug #15608]

[9034cbd331] Jeremy Evans 2020-03-09 15:11:13 UTC

NEWS に f4394bbca361c2bb500f586ba0bf1bef8b919910 のブロックパラメータで配列を splat する挙動の変更について追記しています。 [Feature #16166]

[62d82b6dfe] git 2020-03-09 15:13:00 UTC

version.h の日付更新

[384feb6c51] Nobuyoshi Nakada 2020-03-10 03:43:49 UTC

9034cbd331624089524a239a050c906bdd798482 の NEWS の追記に含まれるチケット参照がリンクになるように footnote を追加しています。

[bba2b70949] Nobuyoshi Nakada 2020-03-10 03:44:33 UTC

同じく 9034cbd331624089524a239a050c906bdd798482 の NEWS への追加のサンプルコード部分をハイライトされるようにマークアップしています。

[4015f27a4d] Takashi Kokubun 2020-03-10 05:31:50 UTC

GitHub Actions の古いほうの Slack 通知の設定を削除しています。

[4bcd5981e8] Takashi Kokubun 2020-03-10 07:19:19 UTC

7ec23593746c8ccabd6c005cc34dde77d564c6c9 で b9007b6c548f91e88fd3f2ffa23de740431fa969 のメソッドキャッシュの実装変更の影響で MJIT の修正としてとりあえず call cache 情報を malloc() で確保するようにしてたのを再修正してメモリがリークするのを防いでいます。ちょっとよくわかってないのですが ISeq の call cache 情報の管理方法を変更して GC で回収された call cache を MJIT が触ってしまわないようにより根本的に修正しているようです。

[aa3a7d6d74] Takashi Kokubun 2020-03-10 08:32:44 UTC

4bcd5981e80d3e1852c8723741a0069779464128 の修正により不要になった tool/ruby_vm/views/_mjit_compile_send.erb の TODO コメントを削除しています。

[28f3e03880] Kazuki Yamaguchi 2020-03-09 06:23:32 UTC

拡張ライブラリ digest の ext/digest/digest_conf.rb というファイル(コメントによると openssl の extconf.rb からコピーしてきたらしい)で openssl の deprecation.rb というライブラリというかツール? に依存していたのをやめてOpenSSL.check_func のかわりに mkmf の通常の have_func を利用するようにしています。コミットログによるとこの deprecation.rb は macOS の古い OpenSSL をリンクしないようにするためのもので、もうこの考慮は不要になったとのこと。 https://github.com/ruby/openssl/pull/333 [ruby-core:44755] [Bug #6379]

[61cfd6da84] Kazuki Yamaguchi 2020-03-10 08:24:47 UTC

tool/sync_default_gems.rb の openssl の同期時のディレクトリ構成の対応を変更しています。

[e4a26cd4f8] Kazuki Yamaguchi 2020-03-09 09:26:19 UTC

拡張ライブラリ openssl に upstream の master から変更をマージしています。テスト時の鍵のサイズ変更(というか自動生成するようにしている?)などがあるので一部はバックポートしたほうがいいかなぁ。

ruby-trunk-changes 2020-03-09

今日は Proc のブロックパラメーターを splat とキーワード引数で受けているところに配列を渡した時の挙動に変更などがありました。

[dff69bb462] Koichi Sasada 2020-03-08 17:53:46 UTC

hash.c の hash_iter_lev_inc() で struct RBasic::flags にセットするビットフラグの演算で int の変数をそのまま使ってたところがあったので VALUE に明示的にキャストして符号なしにするように修正しています。

[fe3514ae60] git 2020-03-08 17:57:48 UTC

version.h の日付更新

[040cfc89b9] Jeremy Evans 2020-03-09 00:47:48 UTC

拡張ライブラリ fiddle で ffi_closure_alloc() を利用するかどうかを libffi のバージョンのみチェックして選ぶようにしていましたが、OpenBSD ではやっぱりうまくないようなので ext/fiddle/closure.c で強制的に USE_FFI_CLOSURE_ALLOC を 0 に定義するようにしています。

[f4394bbca3] Jeremy Evans 2019-09-27 20:35:29 UTC

Proc オブジェクトのブロックパラメーターに *args のような splat 引数を使った時に通常引数に配列を渡した時に splat しない(つまり args に配列の配列として入れる)ようにする条件に同じブロックパラメーターに keyword 引数や keyword rest 引数があるかどうかを加味して、キーワード引数があったら splat していたのをやめています。うーむ、ややこしい。 [ruby-core:94925] [Feature #16166]

[544ebc669b] Hiroshi SHIBATA 2020-03-09 04:38:05 UTC

90de118a75921a08497b41de2950971073b3c924 で tool/downloader.rb で Unicode 関連のデータファイルをダウンロードするのに https を使うと mswin でエラーになるので http を使うようにしていたのを再度 https を利用するようにしています。 [ruby-core:83074] [Bug #13962]

[d8fcc67642] Takashi Kokubun 2020-03-09 05:34:09 UTC

標準添付ライブラリ drb のテスト test_06_timeout で skip する条件に MJIT が有効な場合を追加しています。