ruby-trunk-changes r34835 - r34850

今日はブロックパラメータの文法に改行を許容する変更と、Net ライブラリ群のタイムアウトの実装のリファクタリングWindows での起動時間短縮のための修正などがありました。

matz:r34835 2012-02-27 23:47:02 +0900

ブロックパラメータの最後、";" や "|" の前に改行を入れるのを許容するように文法を変更しています。 昨日の r34832 で追加したテストに対応する修正です。 [ruby-dev:45292] [Feature #6095]

knu:r34836 2012-02-28 00:11:00 +0900

r34830 で修正した String#crypt の salt として受け付ける文字列を表現している正規表現の "^" を "\A" に変更しています。

svn:r34837 2012-02-28 00:11:04 +0900

version.h の日付更新。

usa:r34838 2012-02-28 01:27:26 +0900

r34834 の ChangeLog に記述のあった test_io.rb の IO#pos のテストをする時に open の mode 引数に "b" を追加してバイナリモードで開くようにしています。

tenderlove:r34839 2012-02-28 10:30:15 +0900

Psych のエンコーディングについてのテストでファイルを open する時に mode 引数に 'r:bom|utf-8' を渡すようにしています。 bom なんて指定が。 [ruby-core:42967] [Bug #6092]

nobu:r34840 2012-02-28 11:44:52 +0900

コンパイラデバッグフラグ (-g または -ggdb) を OS ($target_os) で決めていたのを、実際にコンパイルしてみてチェックして -ggdb が使えればそちらを使うようにしています。 [ruby-core:42875] [Bug #6080]

drbrain:r34842 2012-02-28 13:51:37 +0900

Net::HTTP でタイムアウトで中断するために Timeout.timeout から発生させる例外のクラスを Net::HTTP::OpenTimeout という独自のクラスにしています。またソケットの切断を検出するために rescue する対象を増やしています。OpenSSL::SSL::SSLError もありえるんですね。 [ruby-core:42495] [Bug #6001]

drbrain:r34843 2012-02-28 14:15:54 +0900

タイムアウト用の例外は Net::HTTP::OpenTimeout から Net::OpenTimeout に移動して、Net::POP3, Net::SMTP, Net::Telnet でも共通して利用するようにしています。またタイムアウトに使うメソッドを Kernel#timeout から Timeout.timeout に変更しています。 [ruby-core:41662] [Bug #5765]

drbrain:r34844 2012-02-28 15:49:52 +0900

ChangeLog のエントリが重複していたのを削除しています。

nobu:r34845 2012-02-28 17:16:03 +0900

lib/time.rb で Time#xmlschema (iso8601) に独自の実装していたのを strftime を利用するようにしています。引数に小数点以下の値をもつ数値を渡すとおかしな結果を返していた不具合修正です。 [ruby-core:42997][Bug #6100]

nobu:r34846 2012-02-28 18:33:35 +0900

IO#readpartial, IO#sysread で読み込み先のバッファ用 String オブジェクトを渡した場合に別の Thread からその String のサイズを truncate すると SEGV してしまう不具合修正。実際に IO の読み込み可能になって GVL 取得した後に String のサイズを改めて保障するようにしています。 [ruby-dev:45297] [Bug #6099]

nobu:r34847 2012-02-28 18:47:47 +0900

ついでに IO#write, syswrite などの出力する String は freeze した複製(変更がなければバッファは共有される)を作っておくようにしています。 出力でブロック中に別の Thread から変更されてしまうと SEGV などの危険があるからですね。しかし write するたびにオブジェクトを確保することになるのでパフォーマンスへの影響が心配ですね。不幸なことではありますが freeze してから write に渡せば複製されないので、気にするならそうするのかなぁ。 read の時と同じく temporary lock では駄目でしょうかね。[2012/2/29 追記]temporary lock だと同じ文字列を別々の Thread で IO#write などに渡すと失敗してしまうので駄目だったそうです。[/追記]

tadf:r34848 2012-02-28 20:28:23 +0900

DateTime#iso8601 でも桁数に小数点以下の端数のある数値を渡すと結果がおかしなる不具合を修正しています。 [ruby-core:42998] [Bug #6101]

shirosaki:r34849 2012-02-29 00:51:25 +0900

詳細まで読み込んでないので見落しあるかもしれませんが、win32 の IO まわりのコードの file.c と win32/file.c の依存関係のリファクタリングと、Makefile, Makefile.sub に win32 関係のルールを追加、移動、それから移動してきた win32 用の win32/file.c の rb_fileloadok() でファイルが読み込み用に開けるかのチェックを Windows 用に最適化した実装を用意して Windows での require などのが高速になるようです。

svn:r34850 2012-02-29 00:51:31 +0900

version.h の日付更新。