今日は Integer の hash 関数の性能改善や rb_inspect() でエンコーディング互換性のエラーが発生しないように(エスケープしてしまうように)する変更などがありました。また case 文に Float::INFINITY を渡すと例外が発生する場合がある不具合修正もありました。
svn: r53026 2015-12-11 01:11:01 +0900
version.h の日付更新。
naruse: r53027 2015-12-11 03:57:08 +0900
rb_inspect() でエンコーディングの互換性エラーがあった時に Encoding::CompatibilityError を発生させずに rb_str_escape() という関数を導入して不明な文字は "\x##" 記法にエスケープして埋め込むようにしています。これにより Array や Hash などのコンテナは中身の文字列が互換性がない時にエラーにならなくなって文字列がエスケープで変化したものを表示してしまうので、NEWS ファイルにその旨追記しています。 [ruby-dev:49422] [Feature #11801]
naruse: r53029 2015-12-11 11:08:41 +0900
tool/merger.rb で tag サブコマンドの最後に GitHub に svn のタグを push する方法を出力するようにしています。
nobu: r53030 2015-12-11 11:11:34 +0900
r52949 の ISeq の binary の dump/load 機能追加時に追加された依存関係を common.mk に反映させています。
nobu: r53031 2015-12-11 11:38:20 +0900
case 文の最適化命令で内部的に利用する Hash オブジェクト(cdhash) を最後に rehash しておくことで chain 法で実装されたハッシュの衝突を抑えるようにしています。 mame さんが日記にこのネタを書いたらすぐに変更されてしまいましたね。 http://d.hatena.ne.jp/ku-ma-me/20151210
hsbt: r53032 2015-12-11 11:53:09 +0900
RubyGems をリリースされたばかりの 2.5.1 に合わせるように更新しています。こまめに同期してきているので version bump とちょっとした typo 修正とテストの変更だけですね。
hsbt: r53033 2015-12-11 11:58:52 +0900
NEWS ファイルに添付の RubyGems が 2.5.1 になったことを追記しています。
nobu: r53034 2015-12-11 14:56:43 +0900
IO#advise のテストが aarch64-linux というプラットフォーム(ARM かな?)では posix_fadvise(2) が未実装で Errno::ENOSYS が発生するためテストで Errno::ENOSYS は捕捉して skip したり無視したりするようにしています。
nobu: r53035 2015-12-11 15:03:30 +0900
r53010 の追加修正。 OpenSSL::SSL::SSLContext#options のテストでのビットマスクの考慮をもう一箇所追加しています。
normal: r53036 2015-12-11 16:43:09 +0900
NEWS ファイルに拡張ライブラリ fiddle の Fiddle::Function#call が GVL を解放するようになったことを追記しています。 [ruby-core:71121] [Feature #11607]
normal: r53037 2015-12-11 17:23:46 +0900
r51582 で Integer の hash 関数の変更で衝突が多くなってしまっていたようなのでビット演算を修正しています。 ビットORしていたところを XOR にして、シフト量も調節しています。このシフト量についてはベンチマークをみて調節したって感じみたいですね。今度は "I'm pretty confident" って書いてあるし自信あるみたいです。また Hash についてのベンチマークスクリプトも追加しています。 [ruby-core:72028] [Feature #11405]
svn: r53038 2015-12-11 17:25:21 +0900
r53037 で新規追加したファイルの svn property 設定。
normal: r53039 2015-12-11 18:15:14 +0900
case の最適化命令 opt_case_dispatch で Float の Float::INFINITY を渡すと整数に変換しようとしてしまう不具合を修正しています。ああーこれは backport 必要なやつですね。 [ruby-dev:49423] [Bug #11804]