ruby-trunk-changes 2019-07-03

今日は MJIT の演算子つき代入系のメソッドの inline 化で異常終了する不具合への対応や最適化のための Array#minmax メソッドの追加、Tempfile#inspect の不具合修正などがありました。

[e8a2521abe] Hiroshi SHIBATA 2019-07-02 12:39:22 UTC

benchmark/ 配下にある benchmark_driver の中から test/lib にあった memory_status.rb を参照していましたが、これもディレクトリ構成の変更に伴ない tool/lib 配下をみるように修正しています。

[e9ea494171] Nobuyoshi Nakada 2019-07-02 13:10:11 UTC

File.birthtime のテストで NotImplementedError 例外発生も無視するようにしています。 [ruby-core:93477] [Bug #15972]

[181b966e75] Anton Davydov 2019-07-02 13:33:12 UTC

標準添付ライブラリ logger の Logger::Period という Module についてのテストを追加しています。 https://github.com/ruby/ruby/pull/2266

[ea30dd7025] Takashi Kokubun 2019-07-02 14:32:09 UTC

MJIT でメソッド呼び出しを inline 化する時に cfp->ep を更新してローカル変数用の領域を VM スタックフレームを省略しても確保するようにしています。 [ruby-core:93473] [Bug #15971]

[f1043090a2] Koichi Sasada 2019-07-02 14:36:27 UTC

181b966e7553ac53d034266a7cdc18664d080814 で追加した Logger::Period のテストを revert しています。通らなかったみたいですね。

[649753b7f5] Yusuke Endoh 2019-07-02 14:45:13 UTC

f1043090a2361019ea4f6832512ef47de3627cb2 で revert された 181b966e7553ac53d034266a7cdc18664d080814 の Logger::Period のテストのリトライ。タイムゾーンへの依存を修正したようです。

[ced640951b] Jeremy Evans 2019-06-17 18:33:44 UTC

Array#minmax を追加しています。 Enumerable#minmax はあるのでそちらが呼ばれてたのですが、単に rb_ary_min() と rb_ary_max() を呼んで結果をまとめるという実装でも Enumerable#minmax に委譲するよりは高速なようです。 [ruby-core:93189] [Bug #15929]

[40d31073b7] git 2019-07-02 15:19:03 UTC

version.h の日付更新

[a4b5aaa9a7] Jeremy Evans 2019-06-17 22:48:44 UTC

doc/contributing.rdoc から ChangeLog の記述についてのセクションを削除しかわりにコミットログの書きかたについてのガイドを追記しています。また git のリポジトリの操作についてもちょっと追記しています。 [ruby-core:87716] [Bug #14886]

[7582287eb2] Jeremy Evans 2019-06-19 01:59:49 UTC

String#-@ で String を継承したクラスのインスタンスで、まだ freeze もされていなかったら dup してから rb_fstring() に渡すようにしています。String クラスでなかった場合 receiver を破壊的に(っていうのかな) freeze するので、それを避けようとしたみたいです。 [ruby-core:93159] [Bug #15926]

[0f283054e7] Jeremy Evans 2019-06-19 17:44:54 UTC

String#scrub で置換方法の指定のためにブロックを渡した呼びかたをした時にブロック内で receiver の文字列自体を破壊的に変更した時に不正アクセスになる危険があったので、検出して例外を発生させるようにしています。 [ruby-core:93252] [Bug #15941]

[bdddaa9f56] Nobuyoshi Nakada 2019-07-02 17:09:01 UTC

rb_hash_new_compare_by_id() を使ってるところを rb_ident_hash_new() を使うようにしています。これなにが違うんだけ……と思ったら同じものだったので rb_hash_new_compare_by_id() のほうは定義も削除しています。

[c07165be1d] git 2019-07-02 17:13:25 UTC

bdddaa9f56702e1d3a58a14607e9881052424b53 のインデントのタブを空白に展開。

[712a66b074] Koichi Sasada 2019-07-02 18:37:25 UTC

ea30dd702512ff9df34fe8c71c825f8f901bf5b1 の MJIT で JIT コンパイルしたコードでローカル変数用の領域をスタックに確保する対応を revert しています。 VM_CHECK_MODE=1 を指定してビルドしたときに assertion にひっかかるそうです。

[efde19ce44] Nobuyoshi Nakada 2019-07-02 18:53:20 UTC

defs/gmake.mk の TEST_TARGETS のテストターゲットの整理で test-all を test-short と test-testframework と test-all に展開するということをしているみたいですけど、うーん? コメントとは逆のことが行なわれているような。 patsubst() って PATTERN,REPLACEMENT,TEXT の順ですよね。

[928260c2a6] Chris Seaton 2019-07-02 13:19:15 UTC

ObjectSpace.define_finalizer で対象のオブジェクト自体への参照を持ったスコープを含む Proc オブジェクトが登録されたら警告を出力するようにしています。あるあるですね。 rb_objspace_reachable_objects_from() を使ってあるオブジェクトから参照できるオブジェクトをトラバースして参照されてないかをチェックしています。結構重いんじゃないかなこれ……。 https://github.com/ruby/ruby/pull/2264 [ruby-core:93485] [Feature #15974]

[796eeb6339] Nobuyoshi Nakada 2019-07-02 19:12:20 UTC

928260c2a613bbdd4402c300e0bf86ae7562e52a の ObjectSpace.define_finalizer のチェックの再修正。 利用する API の変更や警告の除去など。 [ruby-core:93485] [Feature #15974]

[9f26242411] git 2019-07-02 19:26:53 UTC

796eeb6339952d92ae1b353d450c7883e589852d のインデントのタブを空白に展開。

[07e9a1d998] Kazuhiro NISHIYAMA 2019-07-03 01:20:51 UTC

.travis.yml で前準備で Unicode のデータファイルダウンロードあたりに date コマンドの実行を追加しています。デバッグのためとのこと。

[10cc6bc4d9] Takashi Kokubun 2019-07-03 01:00:50 UTC

712a66b0741605f5b2db670a292b9bb352f8a716 で revert された ea30dd702512ff9df34fe8c71c825f8f901bf5b1 の MJIT の修正のリトライというか、ローカル変数やブロックパラメータまわりの操作命令を含む ISeq は inline 化できないように制限を追加する方法で不具合を回避するようにしています。 [ruby-core:93473] [Bug #15971]

[dcedf0a008] Nobuyoshi Nakada 2019-07-03 05:16:36 UTC

efde19ce440f8656c3ce631a1d2a56e830961e9d の defs/gmake.mk の TEST_TARGETS の調整は revert して、check ターゲットを分解する時に test-testframework test-short も追加するようにしています。 test-all はこれらを含んでいないと。

[89cef1c56b] Nobuyoshi Nakada 2019-07-03 06:22:16 UTC

928260c2a613bbdd4402c300e0bf86ae7562e52a で追加した ObjectSpace.define_finalizer の警告追加についての spec を version guard を追加して古い ruby で動くようにしています。 [ruby-core:93485] [Feature #15974]

[e44c9b1147] Kazuhiro NISHIYAMA 2019-07-03 10:25:05 UTC

標準添付ライブラリ tempfile の Tempfile#inspect で "(closed)" というメッセージを含めるかどうかの判定のために closed? メソッドを self にそのまま呼んでたので File オブジェクトの closed? メソッドを呼ぶように修正。エラーになってたみたいですが r46191 でだいぶ前に追加されてそのままだったのでなんで今になって CI でエラーになったんだろ。
[追記]これは 928260c2a613bbdd4402c300e0bf86ae7562e52a の Object.define_finalizer の影響で Tempfile の delegate がちゃんと設定されなくなって呼べなくなってしまったということみたいです[/追記]