ruby-trunk-changes 2020-06-21

今日は Integer#zero? メソッドを定義(Numeric#zero? を上書き定義)して MJIT で inline 化できるようにする高速化などがありました。

[95b0fed371] Takashi Kokubun 2020-06-20 21:55:09 UTC

[Feature #15589] の Number#zero? が == 演算子メソッドで比較するより遅いという問題(問題?)を解決するための布石らしいですが、Integer#zero? を Numeric#zero? を再定義するかたちで定義追加しています。またこの定義は ruby 実装で追加され C 関数 int_zero_p() を Primitive.cexpr! を用いて呼び出すように定義されています。 https://github.com/ruby/ruby/pull/3226 [ruby-core:98796] [Misc #16961]

[cc14319b71] git 2020-06-20 21:55:30 UTC

version.h の日付更新

[d95249ade3] Nobuyoshi Nakada 2020-06-20 23:14:49 UTC

95b0fed3714b87dcb40a16f33d9e3160f9945e38 の Primitive.cexpr! に渡す文字列に ";" まで含まれていたのが不要だったので削っています。

[7561db8c00] Takashi Kokubun 2020-06-21 00:13:03 UTC

組み込みメソッドの ruby 実装で使える Primitive.attr! というメソッド(のようにみえるもの)で MJIT 時に C 関数呼び出しの inline 展開を指定できるようにしています。これを Integer#zero? の定義で使って(MJIT 下での)高速化を図っているようです。 https://github.com/ruby/ruby/pull/3242 [ruby-core:91420] [Feature #15589]

[838d695c16] Nobuyoshi Nakada 2020-06-21 01:34:07 UTC

tool/runruby.rb で起動する ruby のファイル名を ruby と決め打ちにしてた部分があったので RbConfig::CONFIG["RUBY_INSTALL_NAME"] を考慮するように修正しています。

[ccd2f99e71] Nobuyoshi Nakada 2020-06-21 02:31:48 UTC

test/pathname/test_pathname.rb で assert のかわりにヘルパーメソッドを使ってエラー時のメッセージがわかりやすくなるように修正しています。

[538276aa77] Takashi Kokubun 2020-06-21 06:23:28 UTC

95b0fed3714b87dcb40a16f33d9e3160f9945e387561db8c009bb79a75024fa4ed0350bfb3d0626c の Integer#zero? の高速化がらみの変更で MJIT のテストが RHEL での CI で SEGV するようになったそうで、ひとまず skip するようにしています。

[67e544cbe1] Nobuyoshi Nakada 2020-06-20 09:26:12 UTC

拡張ライブラリ date の Date._parse および Date.parse、DateTime.parse メソッドの rdoc 用コメントに入力が不正な場合にエラーにならずに変な結果を受け取るだけになる場合もある(フォーマットのチェックに使えるものではない)という注意書きを追記しています。

[956d187223] Nobuyoshi Nakada 2020-06-20 10:08:01 UTC

67e544cbe15abb852742236f9de1b3b9a9add676 にさらに追記して Date._strptime, Date.strptime, DateTime.strptime を使うことをすすめる一文も追加しています。

[995923b7f9] Nobuyoshi Nakada 2020-06-20 10:21:35 UTC

Time.parse の rdoc 用コメントにも 67e544cbe15abb852742236f9de1b3b9a9add676 と同様に不正な文字列をチェックできるものではないという注意書きを追記しています。

[426db4cd90] Takashi Kokubun 2020-06-21 07:34:31 UTC

vm_invoke_block() の switch 文に到達しないはずの default 節を追加して rb_bug() を呼び出すようにしています。コンパイラによる未初期化変数参照の警告避けのようです。

[ec07e2de1a] Takashi Kokubun 2020-06-21 09:14:32 UTC

標準添付ライブラリ net/ftp のテストでソケットからの読み込みのタイムアウトを MJIT 有効時にさらに延ばしています。