ruby-trunk-changes r51579 - r51588

今日は Hash の効率改善や IO#each_codepoint の不具合修正などがありました。

normal: r51579 2015-08-15 04:14:06 +0900

r51576 の ChangeLog エントリに ML とチケット番号の参照を追記しています。 [ruby-core:70386] [Bug #11336]

svn: r51580 2015-08-15 04:14:25 +0900

version.h の日付更新。

normal: r51581 2015-08-15 04:23:02 +0900

rb_iseq_mark() で RUBY_MARK_UNLESS_NULL() で NULL チェックつきの mark をしていた location.(label,base_label,path) などのメンバは NULL になることがないということで直接 rb_gc_mark() を呼び出すようにしています。

normal: r51582 2015-08-15 04:52:06 +0900

数値オブジェクトをキーとした時の Hash の効率を改善するため、hash 関数で下位ビットを捨てるようにしています。 rb_ident_hash_new() でのみ適用してた前処理を一般的な Hash でも適用するようにしたというものです。 VALUE の下位 bit は固定的なパターンになっていることが多いので、とのことですが、捨てたほうが性能が良くなるというのも理屈がよくわからないですね。 [ruby-core:70181] [Feature #11405]

nobu: r51583 2015-08-15 10:15:22 +0900

IO#each_codepoint でマルチバイト文字を含むエンコーディングで、読み込まれているバッファが1文字に満たない途中だった時に続きを読み込まずに固まってしまう不具合を修正しています。 [ruby-core:70379] [Bug #11444]

nobu: r51584 2015-08-15 10:51:10 +0900

標準添付ライブラリ win32/registry で String のサイズを bytesize で取得すべきところ size で文字数を取得していたところを修正しています。 [ruby-core:70365] [Bug #11439]

nobu: r51585 2015-08-15 11:30:56 +0900

Range#=== の実装で Range#include? が再定義されてなかったら rb_funcall() によるメソッド呼びだしのかわりに range_include() 関数を直接呼び出すようにしています。

nobu: r51586 2015-08-15 13:32:15 +0900

拡張ライブラリ openssl と socket でメソッド名などの Symbol を受け付ける時に SYM2ID() を使って pindown してしまっていたので rb_sym2str() を使って dynamic symbol のまま扱えるように修正しています。

nobu: r51587 2015-08-15 13:34:07 +0900

openssl のテストで assert_raises という minitest の assertion メソッドを使っていたところを assert_raise に変更しています。

nobu: r51588 2015-08-15 13:34:29 +0900

拡張ライブラリ openssl で OpenSSL::SSL::SSLContext.new で ssl_version を指定する文字列が NUL 終端している(NUL 文字を途中に含まない)ように StringValueCStr() を使って取り出すようにしています。また不明な version の指定時の例外に引数を埋め込む時に PRIsVALUE を使ってエンコーディングを保持したまま埋め込むようにしています。