ruby-trunk-changes 2020-12-11

今日は異常終了時の C のバックトレース表示で関数が抜けることがあった不具合の修正や、未初期化のインスタンス変数参照時の警告をやめる変更などがありました。

[78f188524f] Masaki Matsushita 2020-09-25 07:20:18 UTC

TCPSocket.new にキーワード引数 connect_timeout を追加して connect(2) 可能になるまでのタイムアウトを指定して Errno::ETIMEDOUT 例外で中断できるようにしています。 [ruby-core:100139] [Feature #17187]

[d5dfc3f2c8] Kazuhiro NISHIYAMA 2020-12-10 12:04:57 UTC

rubygems, rdoc, un.rb で webrick がなかった時のメッセージ出力と終了を Kernel#abort メソッドを使うように書きかえています。

[0fcd478a4e] Kenta Murata 2020-12-10 12:35:53 UTC

bb489aca5815acf3afd43ec9e3cdae008d882e3a で追加した C API の prototype 宣言の関数名 typo を修正しています。

[73db60bdda] Kenta Murata 2020-12-10 12:41:47 UTC

bb489aca5815acf3afd43ec9e3cdae008d882e3a で追加した C API rb_memory_view_prepare_item_desc() の prototype 宣言で戻り値の型も間違えてたので修正しています。こっちは気がつかなかったな。

[673fcb7e9a] Kazuhiro NISHIYAMA 2020-12-10 12:48:04 UTC

78f188524f551c97b1a7a44ae13514729f1a21c7 の NEWS エントリの追記のチケット参照がリンクになるように footnote に追加しています。

[b72f613210] Nobuyoshi Nakada 2020-12-10 15:56:06 UTC

load.c の require_internal() で th という変数を EC_EXEC_TAG()/EC_POP_TAG() のセクションをまたいで使いまわしていたためいわゆる clobbered 警告が出ていたのを、別の変数を導入して使いまわさないようにして回避しています。

[7f4c31d6a3] git 2020-12-10 16:19:47 UTC

version.h の日付更新

[f3c19ddfbc] Yusuke Endoh 2020-12-10 15:09:09 UTC

GCC 8 以降でコンパイルした場合に rb_bug() などでの C のバックトレース表示で関数が抜けることがあったのを修正しています。 debug_info_reader_init() で DebugInfoReader::current_low_pc を 0初期化していなかったのを修正しています。デバッグ情報の DWARF の内容のエンコードのされかたが変化したので表出したみたいです。

[4a559aa225] MSP-Greg 2020-12-10 17:27:02 UTC

087ac34fb2f6fa74bd84a290d511f4d47a286119 で common.mk で make test-spec 実行時に mspec に -I./tool/lib のオプションを渡すようにしてましたが GitHub Actions の MinGW 版ではコマンドが直接書かれてたのでそこにもオプションを追加しています。 https://github.com/ruby/ruby/pull/3882

[01b7d5acc7] Jeremy Evans 2020-12-10 04:53:02 UTC

$VERBOSE が真の時にインスタンス変数を未初期化のまま参照した時に警告メッセージが出力されてましたが、これを出力しないようにしています。あんまり有用ではないけどこのチェックのために多少オーバーヘッドがあるので消すと高速化するので、とのこと。 [ruby-core:101231] [Feature #17055]

[699608487d] Jeremy Evans 2020-12-10 15:36:55 UTC

01b7d5acc702df22d306ae95f1a9c3096e63e624 の影響で VM 命令 getinstancevariable が割り込みされる可能性がなくなったので leaf = true に変更しています。MJIT 化で inline 化できるようになってこの意味でも高速化される余地ができますね。

[dca13e2bf7] Jeremy Evans 2020-12-08 17:00:04 UTC

コマンドラインオプションの -W は -W0 -W1 のようにレベルの引数を追加することができるのでそのせいだと思いますが、-We のように他のオプションと一緒に指定すると -W 単独で指定した時とは違って -W1 相当になってたのを -W2 相当に変更しています。はー知らなかった(たぶんバグですね)。

[f56ab7a476] Takashi Kokubun 2020-12-10 19:18:23 UTC

4a559aa22537bbd2f17c7babb1aca48d1a3a4647 の続きで GitHub Actions の MinGW での rubyspec 実行で ruby のオプションとして -I オプションを渡してましたが mspec へのオプションとして渡すように変更しています。

[4474aadae8] Takashi Kokubun 2020-12-10 19:48:54 UTC

f56ab7a4764131e5c01e279623e2a141442426a8 のさらに再修正で、やっぱり ruby のオプションに -I を渡すようにして、かわりに指定するパスが間違ってたのを修正しています。

[97868f16ff] Takashi Kokubun 2020-12-10 21:00:02 UTC

f56ab7a4764131e5c01e279623e2a141442426a84474aadae8d6610cc5b1c62156739d4245a1a38c のさらに再々修正で、やっぱり -I オプションは mspec のオプションとして渡すようにしています。

[6b1d2de6cc] Takashi Kokubun 2020-12-10 22:40:22 UTC

699608487d2ff09bb5c610a9d1e6e13f5bd2a25eVM 命令 getinstancevariable を leaf=true にしていましたが、Ractor 対応で入れたチェックのためやっぱり leaf にはできないということで戻しています。残念。

[9b0c36b390] Kenta Murata 2020-12-11 00:41:12 UTC

拡張ライブラリ fiddle に 1.0.4 を upstream repo からマージしています。いくつか C の型の定数の追加などがあるようです。 https://github.com/ruby/ruby/pull/3860

[974e89ae07] Koichi Sasada 2020-12-11 00:54:34 UTC

da3bca513f437b05b3953c3712ff48621fc5e008 の Ractor 毎のオブジェクトの slot を複数 page 確保できるようにしたのを revert しています。 CI でエラーが発生したようです。

[56918578ea] Masaki Matsushita 2020-12-11 02:13:13 UTC

拡張ライブラリ socket の TCPSocket.new の rdoc 用コメントに resolv_timeout というキーワード引数の記述が残ってましたが、たぶん getaddrinfo_a() 利用をやめた影響で使えなくなったので削除しています。

[ad6573163f] Koichi Sasada 2020-12-11 02:52:19 UTC

make run や make runruby、make gdb や make lldb で ruby を起動する時に RUNOPT0 という変数で ruby のオプションを追加できるようにしています。

[b53ccb9c69] Koichi Sasada 2020-12-11 02:54:50 UTC

Kernel#lambda にブロックから作られた Proc オブジェクトを渡した時にブロックなしの labmda 呼び出しの警告が出力されてなかったのでされるように修正しています。うーんこれは警告されなくても良いのでは? たぶん暗黙に呼び出し元のメソッドに渡されたブロックを引き継ぐ挙動をやめるための警告ですよね。 [ruby-core:101209] [Feature #17361]

[288e93bea8] Nobuyoshi Nakada 2020-12-11 04:40:03 UTC

標準添付ライブラリ rdoc で C の関数宣言で NORETURN() のようにマクロ込みで宣言しているものを parse できるように正規表現を修正しています。 https://github.com/ruby/ruby/pull/3883

[8c5ec10038] Yusuke Endoh 2020-12-11 01:54:06 UTC

configure で ruby 本体に libz (zlib) をリンクするかどうかの判定に --compress-debug-sections=zlib が指定されたことというチェックがありましたが、Linux distribution のパッケージ向けにビルドする時には --compress-debug-sections=no が指定されているらしく、そうするとバックトレースを得るのに問題があるらしくて、常に libz をリンクするようにしています。 https://github.com/ruby/ruby/pull/3627

[c718c30007] Yusuke Endoh 2020-10-03 15:07:37 UTC

8c5ec10038a9bbc328eeb3756da207ba5976072d の続きで addr2line.c で C のバックトレースを Debian などの distribution でビルドされているようにデバッグ情報が異なるファイルパスのファイルに分離されるようにビルドされている時に取得できるように対応しています。デバッグ情報って分離できるんだ。 https://github.com/ruby/ruby/pull/3627

[bca57b911a] Nobuyoshi Nakada 2020-12-11 05:09:34 UTC

Kernel#abort と Process.abort の rdoc 用コメントの位置を rb_define_global_function() などに渡してる関数の前のほうに移動しています。

[947a5505e5] Hiroshi SHIBATA 2020-12-11 05:15:52 UTC

tool/lib/webrick/version.rb の WEBrick::VERSION を "1.7.0" に更新しています。

[a6a68bae3c] Hiroshi SHIBATA 2020-12-11 05:16:35 UTC

webrick の gemspec ファイル tool/lib/webrick/webrick.gemspec がまだ残っていたので削除しています。

[4439b78336] Takashi Kokubun 2020-12-11 05:36:42 UTC

067f45ecd379ea44f294084c8f342c69f735c018 で make test-all と同様に bootstraptest/runner.rb でも core ファイルを削除していたのを日時つきのファイル名に改名して一時ディレクトリに残していくようにしています。

[885135f84c] Takashi Kokubun 2020-12-11 05:56:48 UTC

rb_bug() などから呼ばれる rb_vm_bugreport() は MJIT の worker からも呼ばれるため GET_EC() が NULL の時に ruby のメソッド呼び出しのバックトレースの出力は抑制するようにしています。

[1728eba48a] Nobuyoshi Nakada 2020-12-11 10:40:25 UTC

Process::Status.wait の rdoc 用コメントの位置を実際に rb_define_singlelton_method() に渡している rb_process_status_waitv() の前に移動しています。

[ed343c76fb] Nobuyoshi Nakada 2020-12-11 10:54:14 UTC

Process::Status.wait で waitpid(2) または wait4(2) がエラーを返した時には内部的な構造体にエラーを格納した状態の Process::Status を返してたのを rdoc の記述に合わせて nil を返すようにしています。