ruby-trunk-changes 2019-07-28

今日は String#split にブロックを渡して呼び出した時にブロック内で正規表現を使った場合の不具合修正がありました。

[e3b613a669] Takashi Kokubun 2019-07-27 12:34:34 UTC

.travis.yml の macOS でのテスト時に --timeout-scale=3.0 オプションをつけてタイムアウトを延長するようにしています。

[f1b76ea63c] Nobuyoshi Nakada 2019-07-27 12:54:34 UTC

String#split にブロックを渡すとブロック内で正規表現マッチを使ってしまうとそれによって last_match が汚染されて分割に影響を与えてしまうので、ブロックが渡された場合は rb_match_busy() を呼んで保護するようにしています。 ブロック渡しは 2.6 からの機能で、単に分割結果を渡して yield するだけだけど、そのかわり結果を配列で返さなくなるので巨大な文字列を分割する時に巨大な配列をつくらなくて済むというやつですね。 [ruby-core:93940] [Bug #16024]

[adf13625ae] Takashi Kokubun 2019-07-27 14:46:39 UTC

e3b613a66986306950fc69d426d947a349b9fc8b で変更した .travis.yml の macOS 時のオプションを --timeout-scale=2.0 に短縮してかわりに travis_wait を 50分まで伸ばしています。

[1d1f98d49c] Nobuyoshi Nakada 2019-07-27 22:33:21 UTC

f1b76ea63ce40670071a857f408a4747c571f1e9 の再修正で MatchedData の MATCH_BUSY フラグを落とす rb_match_unbusy() という関数を作って使い終わった時に?フラグを落として再利用しようとしているみたいです。マッチ部分文字列用のバッファを毎回確保しないようにするためかな…。 re.c をちょっと眺めたけどそもそも BUSY がよくわからず。 [ruby-core:93940] [Bug #16024]

[bce348204f] git 2019-07-27 22:37:35 UTC

version.h の日付更新

[a6e32855d0] Nobuyoshi Nakada 2019-07-28 00:43:26 UTC

標準添付ライブラリ reline でクオート文字に対応する閉じクオートやそのエスケープ記法にマッチさせる正規表現を毎回 Regexp.escape して正規表現リテラルコンパイルしてたのを、開きクオートが出現した時点でやっておいてそれを使いまわすようにしています。

[b40589802b] Nobuyoshi Nakada 2019-07-28 00:52:07 UTC

reline のリファクタリング。 if 文を case 文にしていますが、コミットコメントによると Regexp を毎回コンパイルしないためとのことで式展開を含む正規表現リテラルに o オプションを追加しているので、こっちがメインかも。