ruby-trunk-changes r46408 - r46412

今日は File.expand_path で文字列の不要に大きなバッファサイズを切りつめる変更(が、切りつめられてないような……)や net/http に新たなレスポンスコードを表現するクラスを追加しています。

nobu: r46408 2014-06-12 13:09:26 +0900

rb_str_resize() で指定された len が現在の文字列長と同じだと操作していなかったのですが、RVALUE に埋め込み可能な文字数で埋め込みになっていなかった場合は埋め込みするようにしています。
コミットログを読むと、サイズが変化しなくても capacity より小さい時は切りつめるように realloc するみたいに読めるのですが、差分を読むとどうもそうなっていないような気が…(REALLOC_N() を呼ぶ分岐は slen == len だと入らない)。あ、でも capa の値自体は len で上書きされますね。そういうことなのかな。

svn: r46409 2014-06-12 13:09:36 +0900

version.h の日付更新。

nobu: r46410 2014-06-12 13:09:41 +0900

File.expand_path がファイルパスの文字列を rb_file_expand_path_internal() で作成する時に大きなバッファ(capa)を持つ文字列オブジェクトを作ってしまうので、切り詰めるようにしています。 このために rb_str_resize() にその文字列のサイズを指定して渡すということをしています。 [ruby-core:63114] [Bug #9934]
うーんこのために r46408 の変更をしたんですね。でもテストは通る……と思いましたが ObjectSpace.memsize_of は String オブジェクトは capa をみるので、capa だけ小さくしても通ってしまうかも。 [ruby-core:63114] [Bug #9934]

nobu: r46411 2014-06-12 13:28:16 +0900

String#freeze で rb_str_resize() を呼び出してメモリバッファを切り詰めておく(それ移行変更されないはずなので大きな capa があっても無駄なので)ようにしています。 [ruby-core:63119]

hsbt: r46412 2014-06-12 18:32:36 +0900

標準添付ライブラリ net/http に HTTP ステータスコード 308 Permanent Redirect を意味するレスポンスクラス Net::HTTPPermanentRedirect を追加しています。 先日 HTTP/1.1 の仕様が改訂されて RFC7238 が出たのでさっそくそれに準拠した機能が追加されたみたいですね。速い。 https://github.com/ruby/ruby/pull/638