ruby-trunk-changes r58832 - r58846

今日は Net::Protocol の最適化や Net::Protocol の multi thread 時の不具合修正、Net::IMAP の不具合修正などがありました。

nobu: r58832 2017-05-21 23:29:00 +0900

tool/downloader.rb の RubyGems のダウンロード機能から --verify オプションによるパッケージの検証機能を使わなくなったので削っています。

nobu: r58833 2017-05-22 01:45:35 +0900

tool/downloader.rb で .downloaded-cache というディレクトリ(環境変数 CACHE_DIR で変更可能)にキャッシュするようにしています。

svn: r58834 2017-05-22 01:45:36 +0900

version.h の日付更新。

stomar: r58835 2017-05-22 04:25:19 +0900

rubyspec の String#casecmp のテストで to_str で変換が走ることを確認するテストで特異メソッド定義していたところを should_receive を使って確認するように変更しています。

stomar: r58836 2017-05-22 04:27:08 +0900

rubyspec に String#casecmp や Symbol#casecmp などのメソッドのテストケースを追加しています。

stomar: r58837 2017-05-22 04:28:48 +0900

String#casecmp や String#casecmp? で文字列に変換できない引数が渡された時に例外を発生させずに nil を返すように変更しています。これは仕様変更なのかな? [ruby-core:80145] [Bug #13312]

stomar: r58838 2017-05-22 04:29:58 +0900

と思ったらやっぱり仕様変更だったようで r58837 の変更について NEWS ファイルに追記しています。 [ruby-core:80145] [Bug #13312]

stomar: r58839 2017-05-22 04:31:37 +0900

rubyspec の String#casecmp のテストでも 2.5 とそれより前のバージョンで挙動の違いを確認するテストを追加しています。 [ruby-core:80145] [Bug #13312]

normal: r58840 2017-05-22 08:52:08 +0900

標準添付ライブラリ net の Net::Protocol#fill_buf で IO#read_nonblocks から受信した文字列オブジェクトを String#clear で空にしてすぐメモリ解放するようにしています。メモリ使用量の削減に効果があるそうで、こういうのやったことはあるけど、細かいところが効くもんだなぁ。

nobu: r58841 2017-05-22 12:18:17 +0900

r58833 の tool/downloader の cache 対応で cache file をダウンロードした場合に hard link を貼るようにしています。 save_cache でも link_cache は呼んでるけど rename がエラーになるからスキップするってことかな。

k0kubun: r58842 2017-05-22 12:56:16 +0900

標準添付ライブラリ erb の ERB::Compiler::SimpleScanner#scan でインスタンス変数に格納されている配列の内容が変更されていなかったら、デフォルトの正規表現リテラルで記述したものを利用して、変更がある時だけ毎回正規表現コンパイルするように最適化しています。 r53412 で遅くなってたそうです。 [ruby-core:73820] [Bug #12074]

nobu: r58843 2017-05-22 13:10:51 +0900

r58833 の tool/downloader.rb の cache 対応で cygwin の時に symbolic link を利用していると mingw/mswin で参照できないことがあるそうなので symbolic link を利用する条件を追加しています。

shugo: r58844 2017-05-22 15:13:11 +0900

標準添付ライブラリ net/imap の r58792 の修正の続きのようです。 Net::IMAP#send_literal で @exception の参照に race condition がありえるから @continuation_request_exception という別のインスタンス変数を使うようにしています。

rhe: r58845 2017-05-22 16:13:06 +0900

Hash#transform_values! は新しい Hash オブジェクトではなく receiver をそのまま返すのに rdoc 用コメントで逆の記述になっていたので修正しています。

normal: r58846 2017-05-22 16:36:00 +0900

標準添付ライブラリ net の Net:Protocol#read と #read_all で読み込み用のバッファの String オブジェクトに読み込んだ文字列を String#<< で追加する前に read_bytes を増加させておくようにしています。どうせすぐ増やすのにそこまで厳密さいるのかなと思ったけどテストコードをみると ruby で実装されているので、その隙間で Thread のスイッチがおきて、しかもバッファ用 String オブジェクトは呼び元で渡せるのでそれを操作されると期待したサイズの増加ができない可能性があったようです。なるほど。