ruby-trunk-changes 2020-03-23

今日は alias で作られたメソッドへの alias を作った時の潜在的不具合修正や CI のテストのデバッグなどがありました。

[6ab7d439f8] Yusuke Endoh 2020-03-22 12:58:18 UTC

大量の Fiber をつくるテスト test_many_fibers_with_threads のタイムアウトを 60秒から 180秒に延ばしています。 Solaris 11 で時間がかかるのでたまにひっかかるのを避けるため。

[095e9f57af] Yusuke Endoh 2020-03-22 13:34:49 UTC

Object#inspect 内での Encoding の扱いについてのテストで実行順序によるエラー? かなにかをデバッグするためにデバッグ用出力のコードを追加しています。

[4f7b435c95] Jeremy Evans 2019-09-23 23:03:15 UTC

Object#clone のデフォルト値を true から nil に変更して、デフォルトでは receiver の freeze 状態を引き継ぐようにしています。言われてみればそのオプションはなかったのか。 [ruby-core:95021] [Feature #16175]

[adecd43197] Jeremy Evans 2020-03-22 16:30:20 UTC

alias で作られたメソッドに対する alias を作った時に Write Barrier をきかせる先の Module/Class が間違っていた不具合を修正しています。 https://github.com/ruby/ruby/pull/2721

[f757330367] git 2020-03-22 16:30:41 UTC

version.h の日付更新

[1c05682929] Yusuke Endoh 2020-03-22 17:13:28 UTC

095e9f57af30fc286ba66557d86f080003ab6d5a のテストのデバッグ用出力を Kernel#p から $stderr.puts に変更して標準エラー出力に出すように変更しています。

[9ebf74fd78] Takashi Kokubun 2020-03-22 18:50:45 UTC

57119dd561418c917b885db5f5af7f129a96d1ec の rb_mjit_header.h のタブを展開する変更のリトライ。展開不要なファイルを skip するようにしたのと Encoding を force_encoding で UTF-8 にそろえるようにしたのが違いかな。 https://github.com/ruby/ruby/pull/2975 [ruby-core:94428] [Misc #16112]

[dec0f582e4] Takashi Kokubun 2020-03-22 19:18:46 UTC

9ebf74fd7843c34eda59f228fc34ab73f2cc458d で再追加した tool/run_without_tabs.rb で Encoding の変換エラーをひとまず無視させるようにしています。

[a55f670757] Takashi Kokubun 2020-03-22 22:46:52 UTC

tool/transform_mjit_header.rb のリファクタリング。変換したシンボルについてのログ出力をまとめて行なうようにして、1行ずつ出力せず "," で繋げることで改行の数を抑制しているようです。

[3cf3427c99] Takashi Kokubun 2020-03-22 22:49:47 UTC

a55f670757c1387aa60d999b3882267816ce7b64 の続き。 tool/transform_mjit_header.rb でヘッダの extern されるシンボル名のセクションに static 宣言があった時にエラーにするようにしている? CI でそのような状況が発生しているみたいなのでそのデバッグのためのようです。

[c4e3d9e953] Takashi Kokubun 2020-03-22 23:36:54 UTC

tool/run_without_tabs.rb で include/ruby/ruby.h も展開対象にするようにしています。

[1d996fe72f] Yusuke Endoh 2020-03-23 01:54:44 UTC

095e9f57af30fc286ba66557d86f080003ab6d5a のテストのデバッグ用のコードを消して、かわりに TracePoint で例外発生のタイミングを掴んで SIGSEGV を発生させることで C のバックトレースを取得しようとしています。

[21d8e69248] Koichi Sasada 2020-03-23 02:32:20 UTC

bootstraptest/test_thread.rb の Thread を大量に作って上限に達した時のテストを一時的に実行しないようにしています。 Debian 9 の CI? でリソースを食い尽してしまうそうなのでデバッグのため?

[d059714746] Takashi Kokubun 2020-03-23 03:20:26 UTC

tool/run_without_tabs.rb でタブ展開をするのを $MJIT_DEBUGFLAGS に -ggdb3 が含まれている時だけにしています。デバッグ時に限るという感じですね。

[d578f1d3ea] Takashi Kokubun 2020-03-23 06:07:09 UTC

d059714746466b4062545719f2e81ca612aa22f3 の続きで tool/run_without_tabs.rb でタブ展開をするのを common.mk に定義した MJIT_WITHOUT_TABS という変数で制御するようにして、デフォルトは true にしています。つまり今度はタブ展開抑制をビルド時に明示的に指定した場合のみにしています。

[3bd7d5617f] Takashi Kokubun 2020-03-23 06:14:31 UTC

d578f1d3ea317ef8d899d0fd9a4440ba67821d17 の再修正で変数 MJIT_WITHOUT_TABS の展開にクオートを追加して空文字列でも1つの引数になるようにしています。

[13e9551b97] Takashi Kokubun 2020-03-23 06:15:50 UTC

tool/run_without_tabs.rb を tool/mjit_without_tabs.rb に改名しています。

ruby-trunk-changes 2020-03-22

今日は power_assert のバージョン更新やテストの Solaris 対応などがありました。

[5908914ea2] Yusuke Endoh 2020-03-21 14:05:45 UTC

標準添付ライブラリ net/http の timeout のテストで使う Net::HTTP#open_timeout の基本値(RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE の影響を与える前)を 0.1 から 1 に増やしています。 OpenCSW Sparc Solaris 10 でタイムアウトしてしまうとのこと。 RUBY_TEST_SUBPROCESS_TIMEOUT_SCALE を 20 にしても足りなかったので基本値のほうを伸ばしたみたいです。

[355c27d2b0] Kazuki Tsujimoto 2020-03-22 04:07:05 UTC

bundled gem の power_assert を 1.1.7 に更新しています。make test-bundled-gems の失敗対策とのこと。

[0bed561f6a] git 2020-03-22 04:09:58 UTC

version.h の日付更新

[57119dd561] Takashi Kokubun 2020-03-22 07:12:21 UTC

tool/run_without_tabs.rb というツールを追加して自動生成した rb_mjit_header.h のタブを展開するようにしています。gdb などを使う時にタブが表示をじゃまするからみたい。 [Misc #16112]

[91acdd17c4] Takashi Kokubun 2020-03-22 07:53:05 UTC

57119dd561418c917b885db5f5af7f129a96d1ec を revert しています。なぜか Travis-CI でエラーになった模様。新しい ruby に依存しているところでもあったかな。

ruby-trunk-changes 2020-03-21

今日は bignunm.c のリファクタリングやテストの修正などがありました。

[86ca640287] Jun Aruga 2020-03-18 13:31:11 UTC

f132825ffa1c225b0055ce6b0aa0d8428fba2623 で Travis-CI で apt-add-repository がタイムアウトするからということで IPv6 を無効化するために追加した tool/travis_disable_ipv6.sh というツールを削除しています。 Travis-CI 側で対処がされたとのこと。

[39cefa64d2] git 2020-03-21 02:51:57 UTC

version.h の日付更新

[be76e86e69] Yusuke Endoh 2020-03-21 06:46:33 UTC

拡張ライブラリ openssl のテストで TCPSocket を wrap して作った OpenSSL::SSL::SSLSocket で TCPSocket のほうを先に close してから OpenSSL::SSL::SSLSocket#close を呼んでもエラーにならないことを確認するテストで、close 自体は大丈夫だけどダミーサーバー内で read しているところが OpenSSL::SSL::SSLError を発生させてしまうことがあるので、start_server にキーワード引数 server_proc で OpenSSL::SSL::SSLError を無視させるメインループ実装を渡してそれを抑制するようにしています。

[b2041c8b70] taki 2020-03-21 00:22:11 UTC

RbConfig.fire_update! の rdoc 用コメントの typo 修正。tool/fake.rb で使っている依存先にも変更を伝播させるためのメソッドですね。

[318be1cb2f] Nobuyoshi Nakada 2020-03-21 07:33:18 UTC

拡張ライブラリ fiddle の extconf.rb で libffi のバージョンを Kernel#warn で表示するのを ver が定義されている時だけにしています。同梱している libffi を使う時と pkg-config でバージョン指定があった時、かな?

[6f0446785b] Nobuyoshi Nakada 2020-03-21 07:42:19 UTC

bignum.c の base36_power_cache というテーブルを Qnil で埋めるように初期化していましたが、static 変数が 0クリアされるのにまかせて、初期値を Qfalse と想定した処理に書き換えています。これにより power_cache_init() はからっぽの関数になっていますが、これは消さないんですね。

[5b287481be] Nobuyoshi Nakada 2020-03-21 07:59:55 UTC

RUBY_INTEGER_UNIFICATION という Fixnum と Bignum のクラスを Integer に統合した時にそれを拡張ライブラリから判定できるようにするために追加したマクロで分岐していたところが本体にも残っていたので削除しています。

ruby-trunk-changes 2020-03-19

今日は rb_execution_context_t の typedef の再定義警告抑制やテストのエラー対応などがありました。

[a833eb29f7] 卜部昌平 2020-03-19 01:20:02 UTC

.travis.ylm の allow_failures のリストに arm32-linux を追加しています。 [ruby-core:97540]

[4eeeb1100a] git 2020-03-19 01:26:39 UTC

version.h の日付更新

[79b4aca94c] Takashi Kokubun 2020-03-19 01:38:31 UTC

test/ruby/test_jit_debug.rb で toplevel return でテストクラス自体の定義をスキップする条件に mswin 版も追加しています。

[eeb178dc1f] 卜部昌平 2020-03-19 01:48:00 UTC

a833eb29f7eaced61919b7ed19e830a3905e8a8b に続いて arm64-linuxtravis.yml で allow_failures に追加しています。

[b6833ff50d] Nobuyoshi Nakada 2020-03-19 04:25:53 UTC

vm_core.h と builtin.h でそれぞれ rb_execution_context_t の typedef があって再定義になってしまっていたのでマクロ定義するようにして重複した typedef しないように preprocessor 分岐を追加しています。

[7cc7627c2d] Kazuhiro NISHIYAMA 2020-03-19 09:11:57 UTC

internal.h のコメントの typo 修正。

ruby-trunk-changes 2020-03-18

今日はキーワード引数を keyword splat で呼び出し/受け取りする時に生成される Hash オブジェクトの無駄をなくす最適化などがありました。

[ac04b778c1] Jeremy Evans 2020-02-27 19:15:04 UTC

Hash リテラル内で {**h} のように keyword splat と同じ記法で Hash オブジェクトを展開することができますが、これがキーワード引数の処理と同じ命令列にコンパイルされるため、結果として得られる Hash オブジェクトが freeze された状態になってしまっていたとのことで、文脈で扱いを変えてメソッド呼び出し引数内の時だけ最適化するようにしています。

[d2c41b1bff] Jeremy Evans 2020-02-24 20:05:07 UTC

キーワード引数を m(**kw) のように定義した場合と呼び出す場合でそれぞれ呼び元と受け取るほうでそれぞれ Hash オブジェクトを作成するので、呼び出し時のフラグに情報を追加して既に呼び元で Hash が専用に確保されていたらそれを流用するようにして余分なオブジェクト生成を減らすようにしています。コミットログが長い。通常のキーワード引数と **kw みたいな Hash 渡しを混在させると呼び元で Hash は作るけど、**kw だけの時は余分な Hash オブジェクトは作らなくするようにしているそうです(そしてその場合呼ばれたメソッド定義のほうで **kw で受け取ってたら新たな Hash オブジェクトが作成されるけど、通常のキーワード引数のみの場合はそれも抑制される)。要するに呼び元の呼びかたとメソッド定義のしかたでそれぞれ Hash オブジェクトを確保する必要の有無があるけど、いずれにしても caller/callee あわせてたかだか 1つの Hash オブジェクトの確保ですむように情報を受け渡すようにしたということのようです。ところで **kw みたいな渡しかたって複数並べることができたんですね。

[f4fc81fe92] git 2020-03-17 19:10:10 UTC

version.h の日付更新

[afd23ed049] Kazuhiro NISHIYAMA 2020-03-18 04:57:03 UTC

47141797bed55eb10932c9a722a5132f50d4f3d8 の Hash#each のブロック起動の仕様変更についての NEWS の追記のチケット参照をリンクにするため footnote を追加。

ruby-trunk-changes 2020-03-17

今日は Hash#each からブロックを起動する時のパラメーターの渡し方についての変更などがありました。

[47141797be] Yusuke Endoh 2020-03-16 14:03:22 UTC

Hash#each がブロックを起動する時の key と value のペアをブロックパラメーターに渡す時の扱いが lambda タイプの Proc オブジェクトをブロックとして渡した時に一貫性がなくなっていたので、常に第1引数に2要素の配列を渡すように呼び出すようにしています。これにより2引数の lambda やメソッドを Proc 化したものをブロックとして渡すと ArgumentError が発生するようになります。無意識に使ってるところけっこうありそうだなぁ。 [ruby-core:77069] [Bug #12706]

[304538e6ff] Kazuhiro NISHIYAMA 2020-03-16 14:21:08 UTC

debug_counter.h のコメントの typo 修正。

[d514ba8e17] Yusuke Endoh 2020-03-16 14:32:55 UTC

Hash#to_proc で作った Proc オブジェクトは lambda? には false を返すのに、実際に call する時には複数の引数を渡すと ArgumentError が発生していたので実態にあわせて lambda? が true を返すように修正しています。 [ruby-core:76846] [Bug #12671]

[290d608637] "S.H" 2020-03-17 10:37:07 UTC

Kernel#clone の実装を builtin function 呼び出しを利用した ruby 実装に移植しています。

[e609fd58a9] git 2020-03-17 10:37:27 UTC

version.h の日付更新

[165e457236] Nobuyoshi Nakada 2020-03-17 10:46:03 UTC

290d608637e37323bb6eeda1b1466519f16308a5 の Kernel#clone の ruby 化時に追加した freeze の値をチェックする関数 obj_freeze_opt() は freeze_opt() からも呼ばれてましたが、こっちではまだ C 実装なので明示的な引数の指定がなく Qundef が入っている場合があるのでそれに対応するようにしています。

[3325194ac0] Nobuyoshi Nakada 2020-03-17 10:47:45 UTC

mjit_worker.c で realloc(3) の引数に unit->cc_entries を直接渡しているところが VC で警告になったそうなのでキャストして一旦 void* 型の変数に格納してから渡すようにしています。

ruby-trunk-changes 2020-03-16

今日は bundler のリポジトリrubygems への統合の対応や Hash#transform_values の高速化の時に入った不具合修正などがありました。

[a8ced388fd] Nobuyoshi Nakada 2020-03-15 13:09:22 UTC

拡張ライブラリ stringio のバージョンを指定するマクロを 0.1.1 に上げています。

[1ad9b231ca] Nobuyoshi Nakada 2020-03-15 13:15:39 UTC

stringio の e257c08f2ec27e2d66cdfa7e2415deb492522e22 の修正についてのテスト追加と StringIO::VERSION による rubyspec の分岐を追加しています。 [ruby-core:96758] [Bug #16497]

[f14409c9bb] Nobuyoshi Nakada 2020-03-15 13:20:16 UTC

1ad9b231ca6b86fe6a2f186022ad3854d2c31743 の再修正。 rubyspec で stringio のバージョンをトップレベルの定数に定義してしまわないように self::VERSION のように無名クラス内の定数に受けておくようにしています。

[713dc619f5] Alan Wu 2020-03-14 00:59:55 UTC

21994b7fd686f263544fcac1616ecf3189fb78b3 の Hash#transform_values の高速化のための変更が write barrier を削ってしまったため GC で SEGV する恐れがあったので再度 write barrier を追加しています。 また rb_hash_stlike_foreach_with_replace() のコールバックに渡す引数も transform_values_foreach_replace() に渡した時に write barrier を入れるために使われるのでコピー先の Hash オブジェクトを渡すように修正しています。これを 0 にしてたのはわざとだったのかな。 [ruby-core:97449] [Bug #16689]

[4ea8356946] git 2020-03-15 22:12:13 UTC

version.h の日付更新

[ad10760b05] Yusuke Endoh 2020-03-16 02:00:32 UTC

proc.c の rb_block_arity() の switch 文の /* fall through */ という break がない時の警告抑制に使われるコメントが return 文のあとにあって意味がないので削っています。

[0f2f07a9bb] Nobuyoshi Nakada 2020-03-16 01:45:22 UTC

st.c のインデント修正のみ。

[8a6ba10f9d] Nobuyoshi Nakada 2020-03-16 08:26:10 UTC

tool/rbinstall.rb の RbConfig::CONFIG の "sitelibdir" と "vendorlibdir" が存在する時だけこれらの設定を利用するようにしています。チケットをみると configure に --with-sitedir, --with-sitearchdir, --with-vendordir, --with-vendorarchdir などのオプションに no を渡した時に期待したように動かないという問題があったようです。 [ruby-dev:49628] [Bug #12392]

[4be2a891cc] Hiroshi SHIBATA 2020-03-16 10:28:52 UTC

bundler が rubygemsリポジトリに統合されたようで、tool/sync_default_gems.rb の同期元や同期するときのディレクトリ構成の対応の修正をしています。 また doc/maintainers.rdoc の bundler のリポジトリの URL も修正しています。