ruby-trunk-changes r42205 - r42214

今日は IO の read 系のメソッドで出力先の String を引数で与えた時のロックが大域脱出を考慮していなかった不具合の修正と IO#seek で新たに Linux 限定の SEEK_DATA と SEEK_HOLE をサポートするようにしています。また bignum.c の API の公開もありました。

nobu:r42205 2013-07-28 03:10:36 +0900

test/ruby/test_rubyoptions.rb の test_segv_test にまとまっていた assertion を必要なスクリプトやオプションを SEGVTest というモジュールにまとめて使いまわして 3つのテストメソッドに分解しています。

naruse:r42206 2013-07-28 04:37:33 +0900

test/test_curses.rb でテスト失敗時に例外メッセージに環境変数 TERM を表示するようにしています。これはおそらく rubyci.org の Gentoo の環境でのみ Curses のテストが失敗する現象が起きていて原因を調査するために追加したものだと思われます。

nobu:r42207 2013-07-28 10:54:30 +0900

Windows 版の pipe の実装で pipe 名として pid や通し番号を使って一意な名前を作る(らしい)ところであらかじめ番号部分に 0 を埋めた文字列に後から上書きしていたのを prefix だけ持っておいて後で snprintf で追加するようにしています。それが目的かどうかはわかりませんが、通し番号のサイズの変更などには強くなった感じです。

akr:r42208 2013-07-28 11:14:58 +0900

昨日の r42202 での rb_integer_pack,unpack の公開に続いて rb_absint_size() と rb_absint_numwords() といった整数のサイズを取得する関数や rb_absint_singlebit_p() という符号つき整数の pack に必要なバッファサイズの計算に必要な関数を公開しています。 [ruby-core:42813] [Feature #6065]

akr:r42209 2013-07-28 12:12:36 +0900

bignum.c の bary_??? などの BDIGIT の配列で整数を受け取る関数群で全体的に引数に const を付けるようにしています。

akr:r42210 2013-07-28 12:51:13 +0900

bignum.c の absint_numwords_generic() で定数として使われる char_bit という配列を static 変数として定義するように変更しています。

glass:r42211 2013-07-28 13:06:14 +0900

Linux 3.1 から lseek(2) でサポートされている whence 引数の SEEK_DATA および SEEK_HOLE をサポートしています。ファイルにはファイルポジションは大きいところにデータがあるけど、途中に実際にデータが詰まっていない hole があるファイルというのが作れますが、SEEK_DATA と SEEK_HOLE はそれぞれファイルポジションの指定を次にデータのある位置もしくは hole の位置に丸める指定だそうです。こんな指定が追加されてたの知らなかった! 実に勉強になります。 [ruby-core:56123] [Feature #8671]

glass:r42212 2013-07-28 17:49:25 +0900

io.c で IO.read に引数で読み込み結果を格納するバッファとして String オブジェクトが指定された場合に読み込みのあいだその String の操作を排除するため rb_str_locktmp() という簡易的なロックを使っていたのですが、これが例外などの大域脱出を考慮していなかったので rb_str_locktmp_ensure() というコールバックを渡す形式の API を追加してこちらを使うことで後始末をちゃんとするようにしています。素晴しいですね。 [ruby-core:56121] [Bug #8669]

nobu:r42213 2013-07-28 20:10:52 +0900

ext/extmk.rb で Makefile の static ターゲットを書き換える処理を $static が真の時は行なわないようにしています。 拡張ライブラリを静的リンクする場合にビルドに失敗していた模様です。 [ruby-core:52845] [Bug #7948]

glass:r42214 2013-07-28 20:31:58 +0900

r42212 と同様に IO.readpartial や IO.sysread でも読み込み中のバッファ用 String のロックに rb_str_locktmp_ensure() を使って例外など発生しても後始末するようにしています。 [ruby-core:56121] [Bug #8669]