ruby-trunk-changes r62728 - r62741

今日は例外などの出力の不具合修正、Enumerator::Lazy#uniq の不具合修正、Pathname の高速化、MJIT 有効時に SEGV することがある不具合の修正などがありました。

nobu: r62728 2018-03-12 22:04:28 +0900

eval_error.c の print_errinfo() で改行文字のみ含む文字列を渡すとバッファを超えたところを出力してしまう不具合があったのを修正しています。 [ruby-core:86086] [Bug #14598]

nobu: r62729 2018-03-13 00:19:37 +0900

ruby 本体テスト用の test/unit の assert_not_all でかっこがなくて誤った解釈になっていたところに明示的なかっこをつけています。

svn: r62730 2018-03-13 00:19:38 +0900

version.h の日付更新。

nobu: r62731 2018-03-13 10:00:08 +0900

Enumerator::Lazy#uniq の内部状態が to_a 複数呼び出した時に共有されていて同じ結果にならないという不具合を修正しています。 Lazy の内部状態管理は難しいなぁ。 https://github.com/ruby/ruby/pull/1820

nobu: r62732 2018-03-13 10:28:27 +0900

標準添付ライブラリ irb の補完を高速化するため無視すべき Module の判定のための Module#name の呼び出しやめるようにしています。 https://github.com/ruby/ruby/pull/1798

nobu: r62733 2018-03-13 10:28:28 +0900

r62732 で Module の集合の管理に Set を使うようにしていましたが、ただの Hash を使うように書き換えています。

nobu: r62734 2018-03-13 11:00:42 +0900

error.c の rdoc 用コメントの例外クラスのリストに FrozenError を追記しています。 https://github.com/ruby/ruby/pull/1818

nobu: r62735 2018-03-13 11:43:04 +0900

r62731 で追加した Enumerator::Lazy#uniq のテストで既に存在してた assertion があったので削っています。

nobu: r62736 2018-03-13 12:40:10 +0900

print_errinfo() で最後に改行のみの空行があった時は削って出力するようにしています。

nobu: r62737 2018-03-13 12:48:56 +0900

print_errinfo() でハイライトや色付けなどの属性を改行毎にリセットするようにしています。

nobu: r62738 2018-03-13 15:29:02 +0900

テストのテストクラス名の重複をさけるため一部のクラスで TestXxx を Test_Xxx のように改名したり suffix を追加したりしています。 https://github.com/ruby/ruby/pull/1763

mame: r62739 2018-03-13 17:18:03 +0900

標準添付ライブラリ fileutils に FileUtils.cp_lr というメソッドを追加しています。 再帰的に hard link を作成するメソッドで、cp コマンドの -lr オプションに対応しているそうです。-l オプションで hark link というの知らなかったな。動機もよくわかってないけど、パッケージ作成時などに使うらしい? [ruby-core:33820] [Feature #4189]

watson1978: r62740 2018-03-13 18:15:10 +0900

拡張ライブラリ pathname の Pathname#chop_basename, #prepend_prefix などのメソッドで正規表現でパスの match をする時に Regexp#=~ メソッドを使っていたのを 2.4 で追加した Regexp#match? メソッドを使うことで $& などの特殊変数へのセットを省略することで高速化しています。ふーんという感じですが効果は絶大でマイクロベンチマークとはいえ 25%〜39%くらい高速化しているとのことで、すごい。 https://github.com/ruby/ruby/pull/1836 [ruby-core:86093] [Bug #14599]

k0kubun: r62741 2018-03-13 21:29:55 +0900

mjit_compile.c の comment_id() という関数で生成するソースコードに ID を文字列化してコメントとして埋め込んでいたのをやめています。ここで呼んでいる rb_id2str() が thread-safe ではないため SEGV することがあったそうです。コメントを出力するだけなので実際の動作には影響はなさそう。