ruby-trunk-changes r51786 - r51797

今日は Windows 版の readlink の不具合修正や、ISeq の構造の変更のほか、yuki さんの初コミットがありました。yuki さんは did_you_mean.gem の作者です。Ruby 2.3 では did_you_mean が bundle される予定みたいですね。

nobu: r51786 2015-09-07 23:45:31 +0900

Process.spawn で :chdir オプションでディレクトリを移動して実行する時に chdir(2) に失敗した場合の例外メッセージに対象のディレクトリパスを含めるようにしています。

nobu: r51787 2015-09-08 00:14:46 +0900

r51786 と同様に Process.spawn の :in, :out, :err などのオプションでファイルパスが指定されて、その open に失敗した時の例外メッセージにもファイルパスを含めるようにしています。

svn: r51788 2015-09-08 00:15:02 +0900

version.h の日付更新。

nobu: r51789 2015-09-08 00:35:26 +0900

r51749 の configure.in の BOOTSTRAPRUBY に BASERUBY を使うようにする変更の追加修正で、BASERUBY が古すぎると fileutils.rb がうまく動かないということで、Module#instance_methods が Symbol を返すかどうか? で判定するようにしているようです。

usa: r51790 2015-09-08 12:06:10 +0900

Windows 版の readlink() で REPARSE POINT を使った mount point の時に読み取るバッファサイズを間違えて返していた不具合を修正しています。

shugo: r51791 2015-09-08 15:08:20 +0900

標準添付ライブラリ ftp の LIST コマンドの実装で Net::FTP#list メソッドのブロックが渡されていた時に結果を1行ずつ取得してブロック呼び出しをしていたのを、先に結果を全て取得してからブロック呼び出しを行うようにしています。呼び出されたブロック内でさらに Net::FTP のコマンドが呼ばれると、プロトコルエラーになってしまうということだそうです。なるほど。 [ruby-core:70439] [Feature #11454]

nobu: r51792 2015-09-08 16:00:13 +0900

process.c の rb_waitpid() で GVL を外して rb_waitpid_blocking() を呼んで EINTR の時にリトライする処理を GVL 外してるところを do_waitpid_nonblocking() という関数に切り出してシンプルな while ループで実装するようリファクタリングしています。

nobu: r51793 2015-09-08 16:15:09 +0900

r51792 の追加で rb_waitpid() で waitpid(2) や wait4(2) の呼び出しの flags に WNOHANG が含まれていたら、ブロックしないはずなので GVL を外さずに直接呼び出すようにしています。

ko1: r51794 2015-09-08 17:21:07 +0900

構造体 rb_call_info_t から blockiseq メンバを削除しています。 rb_call_info_t に持つのではなく send, invokesuper などの VM 命令のオペランドとして渡すようになっています。 また ISeq のdump 時の構造が変化しているため minor version を 2→3に更新しています。おお、ISeq のバージョンが更新されるのはじめてみたかも。

yuki: r51795 2015-09-08 21:54:35 +0900

gems/bundled_gems に変数や定数名を typo した時に正しい名前の候補を教えてくれる便利な gem、 did_you_mean.gem が追加されています。 [ruby-core:69536] [Feature #11252]
did_you_mean.gem の開発者である yuki さんの初コミットです。ようこそ。

usa: r51796 2015-09-08 22:19:41 +0900

で、残念ながら did_you_mean.gem の ruby バージョンの範囲の条件が trunk でインストール不可と判定されるようになっててインストールされなかったため、r51795 は revert されています。

usa: r51797 2015-09-08 22:51:04 +0900

Windows で mklink コマンドを使って作た REPARSE Point による mount point を File.realpath で解決するテストを追加しています。 r51790 の修正に対するテストです。 REPARSE Point を使った mount point のことを Junction Point と言うそうです。