ruby-trunk-changes r38910 - r38929

今日は Enumerator::Lazy のいくつかのメソッドでの状態の管理方法を修正しています。また __dir__ のドキュメントを始め NEWS などの追記、修正がありました。

marcandre:r38910 2013-01-24 05:05:21 +0900

NEWS ファイルの行末の空白を除去。

svn:r38911 2013-01-24 05:05:26 +0900

version.h の日付更新。

marcandre:r38912 2013-01-24 05:05:42 +0900

NEWS に Proc#== での比較の変更を追記しています。

drbrain:r38913 2013-01-24 09:40:49 +0900

doc/syntax/refinements.rdoc を追加して Refinements の仕様を追記しています。 おおー最新の仕様ですね。 super についての挙動も記述されています。

drbrain:r38914 2013-01-24 10:28:47 +0900

NEWS ファイルに rdoc の機能追加について追記しています。

nari:r38915 2013-01-24 11:50:23 +0900

__dir__ の rdoc 用コメントに __dir__ が必ず絶対パスを返すことを追記しています。 [ruby-core:51578] [Bug #7729]

naruse:r38916 2013-01-24 12:03:49 +0900

__dir__ の rdoc 用コメントの再修正をしています。 File.dirname(__FILE__) と同等だと書かれていましたが、実際には常に絶対パスを返すためその説明を書き換えています。 [ruby-core:51578] [Bug #7729]

nari:r38917 2013-01-24 12:08:00 +0900

NEWS ファイルの __dir__ についての説明を修正しています。 説明不足で current directory を返すかのような文になっていました。

naruse:r38918 2013-01-24 13:20:33 +0900

r38916 で __dir__ の rdoc で File.expand_path(__FILE__) と同等だと書かれていましたが、実際には File.realpath でシンボリックリンクを解決したパスを返すので、サンプルと説明を修正しています。 [ruby-core:51578] [Bug #7729]

nari:r38919 2013-01-24 14:35:05 +0900

__dir__ の NEWS の説明と rdoc 用コメントを再度修正しています。 File.realdirpath(__FILE__) と同等であるとしています。 [ruby-core:51578] [Bug #7729]

marcandre:r38920 2013-01-24 15:22:34 +0900

Enumerator::Lazy#take が返す Enumerator::Lazy にメソッドチェインしたメソッドのブロック内で同じオブジェクトを参照した時に評価結果がずれたり、Enumerator#next で外部イテレータとして値を取得する特に途中で rewind で状態を巻き戻すと取得できる回数がおかしくなる不具合を修正しています。 NODE に埋め込んで関数の引数として取り回していたカウンタをインスタンス変数として Enumerator::Lazy オブジェクトに持たせるようにしているようです。 でもこれでネストした時になぜうまくいくのかよくわかりません。むしろインスタンス変数にしてしまうと同じオブジェクトで take の呼び出しがネストするとまずそうですけど。 [ruby-core:51430] [Bug #7696]

marcandre:r38921 2013-01-24 15:23:07 +0900

Enumerator::Lazy#drop_while でも同様にカウンタの扱いを修正してネストした呼び出しの時の不具合を修正しています。 [ruby-core:51430] [Bug #7696] [ruby-core:51420] [Bug #7691]

marcandre:r38922 2013-01-24 15:23:42 +0900

Enumerator::Lazy#drop でも同様にカウンタの取り扱いを修正してネストした呼び出しでの不具合を修正しています。 [ruby-core:51430] [Bug #7696] [ruby-core:51420] [Bug #7691]

marcandre:r38923 2013-01-24 15:24:22 +0900

Enumerator::Lazy#zip で引数を lazy で Enumerator::Lazy 化して取り扱うようにしていたのを to_enum で Enumerator に変換して使うように変更しています。 これにより Enumerator::Lazy#zip が返す Enumerator::Lazy を繰り返し force で評価しても同じ結果が返るようにしています。これどっちがいいのか迷うところだと思うのですが、他と合わせたのでしょうか。 [ruby-core:51430] [Bug #7696] [ruby-core:51420] [Bug #7691]

nobu:r38924 2013-01-24 15:55:24 +0900

再度 __dir__ のドキュメントの説明を修正しています。 File.realdirpath と File.dirname(File.realpath) はパスの最後の要素が存在しない時にエラーになるかどうかで微妙に挙動が異なるそうです。 [ruby-core:51578] [Bug #7729]

marcandre:r38925 2013-01-24 16:05:42 +0900

Enumerator::Lazy#zip の引数に全て Array オブジェクトを渡した時には Enumerator 化せずに別の処理を利用するようにしています。 Enumerator は Fiber を利用していて遅いため、これで一般的なユースケースでのパフォーマンス向上を図っているのだと思います。 [ruby-core:51472] [Bug #7706]

marcandre:r38926 2013-01-24 16:50:33 +0900

Enumerator::Lazy#zip の引数に メソッド each を呼べないオブジェクトが渡された時にはすぐに ArgumentError を発生させるようにチェックを追加しています。 [ruby-core:51472] [Bug #7706]

marcandre:r38927 2013-01-24 16:51:05 +0900

r38926 での Enumerator::Lazy#zip の引数のチェックと同様に Enumerable#zip と Array#zip で引数のチェックを Check_Type() を使ったものから each が呼べないという正しメッセージで例外を発生させるようにしています。 [ruby-core:51472] [Bug #7706]

drbrain:r38928 2013-01-24 16:54:45 +0900

doc/syntax/calling_methods.rdoc にメソッド探索の仕様について追記しています。 また doc/syntax/refinements.rdoc のメソッド探索の部分の間違いを修正しています。もうこれ syntax のドキュメントじゃないですよね。

sorah:r38929 2013-01-24 19:56:47 +0900

NEWS ファイルに libyaml が ruby のソースに同梱されて psych のビルド時に利用できるようになったことを追記しています。