ruby-trunk-changes r51699 - r51709

今日は Queue#close メソッドの追加、Windows での symlink 実装の追加対応などがありました。

ko1: r51699 2015-08-27 07:59:32 +0900

r51660 で組み込みクラスになった Queue に Queue#close メソッドを追加して、Queue を閉じることができるようにしています。閉じた Queue が空になると Queue#deq は nil を返すか、引数に true を渡すとかわりに例外 ClosedQueueError を発生させるようになっています。 [ruby-core:66843] [Feature #10600]
例外を使うかどうかが Queue#close の引数で決まるのはちょっと妙な気がしますね。 Queue#deq/pop にキーワード引数を追加したほうが良いような…。あとライブラリとしても容易に実装できると思いますが、close を N回で本当に閉じるという機能があると producer-consumer モデルで複数の producer の終了を検出するのが楽になりますね。っていうのをチケットに書けってことですね、書きました。

svn: r51700 2015-08-27 08:00:15 +0900

r51699 のコメントの行末の空白除去。

nobu: r51701 2015-08-27 10:03:55 +0900

ファイル操作のエラー時の SystemError 例外を発生させる file.c の sys_fail2() で RUBY_FUNCTIONAL_NAME_STRING が定義されている時に関数名をメッセージに含めることができるように関数マクロ定義を追加しています。これ RUBY_FUNCTIONAL_NAME_STRING が未定義の時に sys_fail2() が未定義にならないですかね?(マクロ定義のところが逆?)

nobu: r51702 2015-08-27 12:57:56 +0900

win32/win32.c に CreateFileW() の wrapper 関数の open_special() を追加して各所で同じフラグを指定して CreateFileW() を呼び出していたのをこの関数を利用するようにリファクタリングしています。

nobu: r51703 2015-08-27 12:58:10 +0900

Windows 版の rename() の実装で移動前後で同じディスクか判定するために VSN (変更前の関数名からみるに Volume Serial Number の略?)の取得時に open_special() に FILE_FLAG_OPEN_REPARSE_POINT フラグを渡すようにしています。

nobu: r51704 2015-08-27 13:01:37 +0900

Windows 版の File.chmod の実装が追加されています。 SetFileInformationByHandle() を用いて FileAttributes の read only のフラグ(FILE_ATTRIBUTE_READONLY)を操作することができるようです。

naruse: r51705 2015-08-27 14:50:36 +0900

.travis.yml の before_install から sudo を用いるコマンドをコメントアウトして、Travis CI のコンテナ上の実行をサポートするようにしているようです。

naruse: r51706 2015-08-27 15:18:44 +0900

r51705 に続いて .travis.yml に sudo: false を追加してコンテナで動くようにしています。

ko1: r51707 2015-08-27 15:25:53 +0900

compile.c の iseq_set_sequence() の短い変数名をより意味のわかりやすい名前の改名するリファクタリング

naruse: r51708 2015-08-27 16:07:18 +0900

r51705, r51706 の .travis.yml のコンテナ対応を revert しています。うまくいかなかったみたいですね。

hsbt: r51709 2015-08-27 18:05:48 +0900

標準添付ライブラリ webrick で "/dev/null" が固定で書かれていたところがあったので IO::NULL を使うようにしています。こちらは Windows にも対応しています。