ruby-trunk-changes r57678 - r57685

今日は例外発生時の標準エラー出力に出すバックトレースの向きを逆転する変更や Thread#fetch メソッドの追加、Rational/Complex/BigDecimal の close/dup の挙動の変更などがありました。

nobu: r57679 2017-02-21 23:51:22 +0900

rb_obj_clone2() で freeze されたオブジェクトの時の例外メッセージにクラス名を埋め込む時に PRIsVALUE を利用してエンコーディングを保持するようにしています。

nobu: r57680 2017-02-22 10:55:10 +0900

rb_obj_clone() と rb_obj_clone2() から共通部分を括り出すリファクタリング

svn: r57681 2017-02-22 10:55:11 +0900

version.h の日付更新。

nobu: r57682 2017-02-22 11:02:11 +0900

Rational や Complex の dup/clone が TypeError を発生させていましたが、これらも Integer や Float と同様に self を返すようにしています。 Rational や Complex って常に freeze されてましたっけ? 手元で試すと frozen? は false を返してるけど。けど破壊的メソッドはないから問題ないってことですね、多分。 r57680 でリファクタリングした immutable_obj_clone() を利用しています。 [ruby-core:79636] [Bug #13237]

nobu: r57683 2017-02-22 16:16:13 +0900

Thread#[] でアクセスできる Thread local storage の内容に別の Thread から取得する Thread#fetch というメソッドを追加しています。キーがない時は KeyError 例外を発生させるか、第2引数かブロックが渡されていたらそれを返すようにしています。 [ruby-core:78500] [Feature #13009]

akr: r57684 2017-02-22 16:31:25 +0900

バイナリのバイト列を含む正規表現をマルチバイト文字を含む文字列に対してマッチさせた時の警告メッセージに、正規表現がバイナリであることが書かれてなかったので追記しています。 [ruby-core:78592] [Bug #13024]

nobu: r57685 2017-02-22 17:50:25 +0900

標準エラー出力が端末に出ている時に限り例外発生時などのバックトレースと例外メッセージの表示をいままでの逆順に、例外発生箇所に近いほうを下に出力するようにしています。つまり Python と同じ向きってことですね。これはなかなかでっかい変更ですね。まあでも多くの人が普段みているバックトレースはこれが出してるものじゃなくてログファイルに出力されているものでしょうからねぇ。 [ruby-core:56096] [Feature #8661]