ruby-trunk-changes 2019-10-21

今日は主に Struct.new に keyword_init: true を渡した時のインスタンス作成時のキーワード引数の扱いの修正と Hash を複製する時の余計のインスタンス生成の抑制による最適化などがありました。

[ca7de0334d] Nobuyoshi Nakada 2019-10-20 11:45:56 UTC

拡張ライブラリ ripper で beginless range リテラルで使われる BDOT2 と BDOT3 というトークンを ripper_token2eventid() で operator として対応付けるように対応しています。

[9223466752] MSP-Greg 2019-10-19 22:23:18 UTC

NoMethodError のテストで did_you_mean.gem を使っている時と使っていない時でメッセージが変化するので DidYouMean 定数の有無で分岐させるようにしています。 [ruby-core:95429] [Bug #16263]

[1d29c9bd46] git 2019-10-21 00:11:47 UTC

version.h の日付更新

[27261007eb] Nobuyoshi Nakada 2019-10-21 00:27:25 UTC

92234667526dfb66cfeff0eab49fa3e7588ff73e で DidYouMean 定数の有無で分岐していたのを defined? で DidYouMean.formatter が定義されてるかどうかまでチェックするようにしています。定数だけだと stub が入っている可能性があるため。 [ruby-core:95429] [Bug #16263]

[71ffe40a44] MSP-Greg 2019-10-20 23:30:42 UTC

標準添付ライブラリ optparse で did_you_mean.gem を使うようにしたのを確認しているテストで候補の表示順が誤っていたのを修正しています。 [ruby-core:95429] [Bug #16263]

[263ee6639d] Nobuyoshi Nakada 2019-10-21 00:12:38 UTC

71ffe40a447a17a1c3388374b7c9979c826b131d の続きで、標準添付ライブラリ optparse で did_you_mean.gem で検出された候補を表示する順序が安定するように、元のオプション名の順序と & で論理積を取るようにしています。 [ruby-core:95429] [Bug #16263]

[e70e81b54e] "K.Takata" 2019-07-29 12:38:05 UTC

st.c にメモリ確保後の NULL チェックが漏れていたところがあったのでエラーチェックを追加しています。 Coverity Scan での検出とのこと。

[375124be51] "K.Takata" 2019-07-30 03:08:33 UTC

e70e81b54e10f1882874884564454f566c41b0dd の st.c でのエラーチェックは #ifndef RUBY という preprocessor の分岐でかこむようにしているんですが、うーん、これはなんだろ?

[44da5a1c87] Nobuyoshi Nakada 2019-10-21 02:45:54 UTC

ext/ripper/eventids2.c の token_to_eventid というトークンと種類を示すインデックスとの対応テーブルをトップレベルの static 変数として格納していたのを ripper_token2eventid() 内の static 変数に移動して、インデックス(オフセット)のみを並べた配列として定義してループで探索せず一発で lookup できるようにリファクタリングしています。この初期化子の書きかたおもしろいんだけど標準なんだろうか。

[215e4b8721] git 2019-10-21 02:50:44 UTC

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

[431132f037] Nobuyoshi Nakada 2019-10-21 03:20:19 UTC

Struct.new に keyword_init キーワード引数に true を渡して作ったクラスのインスタンスは rb_class_new_instance_kw() を使って作成して、new に渡されたキーワード引数を委譲させるようにしています。

[8b8b9c1a1f] Koichi Sasada 2019-10-21 07:48:37 UTC

72825c35b0d8b9d566663de961fddbf4f010fff7 による array hash 実装による小さめの Hash の hash 値の格納方法の変更について追記しています。 [ruby-core:91530] [Feature #15602]

[b970259044] Dylan Thacker-Smith 2019-10-21 08:29:21 UTC

Hash#initialize_copy の実装でコピー後に rb_hash_rehash() を呼んでいて、rb_hash_rehash() の内部でもさらにもうひとつ Hash オブジェクトを作って挿入後にポインタ付け替えをしていて無駄なので、Hash#replace の実装に手を加えてこっちを使うようにしています。代表的には Hash#dup で Hash の複製する時のパフォーマンス改善のためのようです。 https://github.com/ruby/ruby/pull/2489 [ruby-core:94507] [Bug #16121]

[5d63a9da40] Nobuyoshi Nakada 2019-10-21 08:45:27 UTC

b9702590445dfea62d271d0a5c942b7adfaaacdd の変更のインデント修正のみ。 [ruby-core:94507] [Bug #16121]

[c8f97d1620] Yusuke Endoh 2019-10-21 09:46:54 UTC

NEWS ファイルの構成の変更/移動やサンプルコードの追記など。