ruby-trunk-changes 2020-05-27

今日は MJIT の細かな最適化やドキュメントの修正などがありました。

[68e987c315] Koichi Sasada 2020-05-26 14:04:10 UTC

マクロ RUBY_DEBUG を通行にした状態でのビルドを GitHub Actions の Ubuntu 版の matrix の項目として追加しています。 https://github.com/ruby/ruby/pull/3144

[a809caa4b3] Koichi Sasada 2020-05-26 14:10:35 UTC

68e987c315815d9fbbc0c9967127be58c14655b5 で make test-all のステップが 2重に書かれてたので1つ削ってます。

[eb20d2f449] Koichi Sasada 2020-05-26 14:20:36 UTC

GitHub Actions の Slack 通知のメッセージに 68e987c315815d9fbbc0c9967127be58c14655b5 で追加した debug 用のオプションの有無についても追加しています。

[5429deb075] Yusuke Endoh 2020-05-26 15:20:14 UTC

標準添付ライブラリ open3 の Open3.popen2e で ensure 節を追加して作成した pipe が確実に close されるようにしています。テストで fd leak が検出されていたようです。

[f8e703e2b0] git 2020-05-26 15:28:32 UTC

version.h の日付更新

[135c6a4b99] Nobuyoshi Nakada 2020-05-26 15:30:18 UTC

拡張ライブラリ fiddle の同梱版 libffi のパッケージにパッチをあてたら autoconf しなおしておくようにしています。

[962c302a1a] Yusuke Endoh 2020-05-26 17:07:38 UTC

tool/lib/leakchecker.rb のテストでのリソースの leak チェックをテストケースごとに skip できるようにして、drb のテストで乱数生成のためのデバイスファイルが開きっぱなしになるのを検出するのを避けるため skip するようにしています。

[e0b40ef5d8] Jeremy Evans 2020-05-26 21:00:51 UTC

tool/rbinstall.rb で mdoc という形式から man 形式への変換をしているところで、bundler の man ファイル群の時はもとから man 形式らしいので変換しないように特別扱いするようにしています。 [ruby-core:98095] [Bug #16823]

[0fcb2dd51d] S-H-GAMELINKS 2020-05-26 16:32:57 UTC

String#ord の実装 rb_str_ord() に static 修飾子を追加しています。

[51fa4c9f49] Nobuyoshi Nakada 2020-05-27 03:12:16 UTC

よくわかってないですが cygwin/GNUmakefile.in というファイルで cygwin 向けの DLL のビルドのためのターゲットと思われるものを削っています。

[0f8b5819b3] Nobuyoshi Nakada 2020-05-27 04:13:12 UTC

cygwin/GNUmakefile.in で clean-local のターゲットがすぐそばで分割して記述されていたので 1つにまとめています。

[4cabd77e33] Nobuyoshi Nakada 2020-05-27 05:30:45 UTC

include/ruby/assert.h の行末の空白除去。

[61b14bb32b] Takashi Kokubun 2020-05-27 05:49:55 UTC

MJIT で rb_mjit_recompile_iseq() を呼ぶコードを生成しているところで ISeq の命令ごとの関数 rb_mjit_recompile_send()、rb_mjit_recompile_ivar()、rb_mjit_recompile_exivar()、rb_mjit_recompile_inlining() などを定義して呼び元での rb_mjit_iseq_compile_info()->xxx_inlining のセットをこれらの関数に切り出しています。キャンセル時の処理なのでメイン部分(?)のコードサイズを小さくして、あまり呼ばれないコード部分に処理を移動する命令キャッシュの効率化による最適化のためという感じでしょうか。

[9d71373c23] Takashi Kokubun 2020-05-27 06:22:19 UTC

vm_insnhelper.c に mjit の precomiled header 向けの vm_stackoverflow() の宣言を追加しています。

[64c5bf5721] Masataka Pocke Kuwabara 2020-05-27 06:37:05 UTC

Enumerator.produce の rdoc 用コメントで組み合わせて使えるメソッド名として Enumerable#slice と書かれてたのを Enumerable#slice_after に修正。 Enumerable#slice なんてメソッドはないということで。 https://github.com/ruby/ruby/pull/3141

[752041ca11] Masataka Pocke Kuwabara 2020-05-27 06:46:42 UTC

Enumerator::Yielder#to_proc の rdoc 用コメントの文法修正。 https://github.com/ruby/ruby/pull/3142

[a3f498e44c] Masataka Pocke Kuwabara 2020-05-27 06:48:46 UTC

Array#max と Array#min の rdoc 用コメントの説明に、配列の要素に Comparable を implement したオブジェクトであることを期待しているという記述がありましたが、これはちょっと意味がおかしいので <=> メソッドを実装しているオブジェクト、と修正しています。 Comparable も <=> が定義されていることを期待した Mix-in 用の Module なので、なんとなく意味はわかりますけどね。 https://github.com/ruby/ruby/pull/3131

[083a17a82a] Takashi Kokubun 2020-05-27 08:25:13 UTC

mjit_exec() から対象の ISeq のコンパイル結果がまだロードされていないタイミングで実行された時の処理を mjit_exec_slowpath() という別の関数に切り出して、これを COLDFUNC つきで宣言することで hotspot から離すことでよく使うコードのサイズを減らす最適化(?)を行なっています。