ruby-trunk-changes r36206 - r36217

今日は Module#mix がついに revert されたり、UnboundMethod を継承関係にない Class/Module の define_method に定義として「移植」できるようになったりという変更がありました。

akr:r36206 2012-06-24 22:35:56 +0900

process.c の async-signal-safe コメントを更新しています。 といっても今回は async-signal-safe の状況が変わったわけではなくて条件の記述の変数名が変わっていたのに追随しています。

nobu:r36207 2012-06-24 22:52:50 +0900

ChangeLog の行末の空白削除。

nobu:r36208 2012-06-24 22:53:44 +0900

process.c の check_exec_fds() からループで file descriptor 関係のオプション毎に処理していた部分を check_exec_fds_1() として切り出して順に呼ぶようにしています。 コミットログによるとループで処理するために配列を変数というか構造体のメンバ参照で初期化しているのが C89 では使えないので回避しているそうです。

nobu:r36209 2012-06-24 23:02:19 +0900

io.c の pipe_open() の win32 版の実装を #if でざっくりと分けていたものを共通する部分をマージしつつ細かく分岐するように書き換えています。

kosaki:r36210 2012-06-25 00:42:21 +0900

configure でマシンスタックのアドレス取得のために _SEND という変数をチェックしている部分を削っています。 これは human68k 向けのもので既にサポートされていないためとのこと。

svn:r36211 2012-06-25 00:42:25 +0900

version.h の日付更新。

usa:r36212 2012-06-25 11:35:29 +0900

struct rb_execarg で pid_t を使っていたところを rb_pid_t という型を使うようにしています。 rb_pid_t は Windows 環境でも使えるように定義されている代替の型だそうです。

nobu:r36213 2012-06-25 15:42:05 +0900

差分がいまひとつ把握しずらいので何か見落してるかましれませんが、io.c にて pipe_open_v() と pipe_open_s() をまとめて引数に配列を指定した時と文字列を指定した時の処理をまとめています。IO.popen でも必要に応じてシェルを経由して起動することができるようにしているのではないかと思います(元からかも)。 コミットログには NotImplementedError についての記述もありますがこちらは元と挙動は変化ないような気がします。

nobu:r36214 2012-06-25 16:57:42 +0900

「メソッド移植」ができるようにしています。これまで UnboundMethod *1を別の Class のオブジェクトに bind したり define_method で移植することはできませんでしたが、Module のインスタンスメソッドからは別の継承関係のない Class や Module の define_method で同じ定義を移植することは許可されるように変更されています。 [ruby-core:34267] [Feature #4254]

nobu:r36215 2012-06-25 17:06:43 +0900

NEWS ファイルに Module#define_method が UnboundMethod (ただし Module のインスタンスメソッドのみ)を受け付けるようになったことを追記しています。

nobu:r36216 2012-06-25 17:49:32 +0900

Module#mix がようやく revert されました。 Module#mix は去年追加されたものの、その後まつもとさんが mix をあきらめることになりました*2。 しかし実装はずっと残っていたのが正式に trunk から取り除かれました。サヨナラ Module#mix。

akr:r36217 2012-06-25 19:21:37 +0900

IO#seek のテストを追加しています。

*1:Method#unbind で特定のオブジェクトから切り離したメソッド。Module#instance_method でも取得できる

*2:https://twitter.com/yukihiro_matz/status/120380913224921088