ruby-trunk-changes r31872 - r31893

今日は Module#mix の追加という言語仕様の追加がありました。また rubygems と minitest のマージ、 require のパフォーマンス改善の修正などです。

nobu:r31872 2011-06-01 01:15:15 +0900

IO オブジェクトの生成時に mode オプションで("rb" とか "wb" の指定で)付加された改行コードの変換フラグを io_encoding_set() で考慮して上書きしてしまわないように修正しています。 [ruby-dev:43603] [Bug #4804]

nobu:r31873 2011-06-01 01:16:06 +0900

Module#mix が追加されています。mix は RubyKaigi2010 でまつもとさんが発表されていた Module#include (Mix-in)の課題を解決するための新機能です。これも NEWS ですね。 Module#include はモジュールを継承ツリーに差し込むことでメソッドや定数を探索パスに含ませて呼べる/参照できるようにしますが、Module#mix は継承ツリーに入れるのではなくメソッドの実体を mix する Module/Class にコピーするように動作します。
これにより

  • メソッドの衝突が検出できる(例外になる)
  • 取り込む時にメソッド名を変更して衝突を回避できる
  • 選択的にメソッドや定数を取り込める(定数はデフォルトでは取り込まれない)

という利点があります。
mix もいいですが refinement は入らないんですかねー。あれはかなり欲しいんですけど。

nobu:r31874 2011-06-01 01:23:00 +0900

ChangeLog のインデント修正。

tarui:r31875 2011-06-01 06:56:01 +0900

$LOADED_FEATURES と $LOAD_PATH からどのパスで feature がロードされたかの検出をする関数で、文字数のチェックを追加して早急にループを打ち切れるようにして require のパフォーマンス改善しています。

drbrain:r31876 2011-06-01 07:25:32 +0900

zlib.c の rdoc 再修正。 ドキュメントのメソッド名が C の関数名にひきずられていたのを修正しています。 [Bug #4695]

drbrain:r31877 2011-06-01 07:27:35 +0900

pty.c で処理が戻ってこないはずの位置の /* not reached */ というコメントがドキュメントパッチで消されていたのを復活させています。 [Bug #4756]

drbrain:r31878 2011-06-01 07:35:59 +0900

Hash#key のドキュメント修正。"Returns the key of the first occurrence of a given value." を "Returns the key of an occurrence of a given value." と変更。 Hash#key が返すキーは Hash に同じ値に対応するキーが複数あった場合どれを返すのかは不定です。 [ruby-core:36377] [Bug #4760]

ryan:r31879 2011-06-01 08:19:50 +0900

Enumerator#feed のドキュメント更新。サンプルコードを詳しくしています。Enumerator#feed は次の Enumerator の元になってる each メソッドからの yield が返す値を指定するものです。 [ruby-core:36373] [Bug #4757]
Enumerator#feed の動作は言葉で表現しにくいですね。

drbrain:r31880 2011-06-01 09:21:46 +0900

prime.rb の rdoc の修正。インデント整形や Prime が Enumerable として使えることの例の追加など。 [ruby-core:36380] [Bug #4762]

drbrain:r31881 2011-06-01 09:26:27 +0900

mathn.rb の rdoc を修正。サンプルコードの整理や関連する他のライブラリへの言及の追加など。 [ruby-core:36380] [Bug #4762]

drbrain:r31882 2011-06-01 09:42:06 +0900

cgi/uril.rb と cgi/core.rb のドキュメント追加、変更。個人的にはクラスメソッドの呼び出しは Klass::meth より Klass.meth のほうが好みなんですけどねー。コーディング規約には方針あったでしょうか。 [ruby-core:36438] [Bug #4775]

ryan:r31883 2011-06-01 09:48:09 +0900

io.c で Kernel#p の rdoc で、 inspect 結果と $/ が出力されると記述されていましたが実際には常に改行が出力されるのでそのようにドキュメントを修正。

mrkn:r31884 2011-06-01 12:37:02 +0900

昨日の BigDecimal の機能追加(初期化時に受け付けるオブジェクトに Integer, Float, Rational を追加)を追記しています。また ChangeLog の曜日の間違い修正。

ryan:r31885 2011-06-01 12:45:05 +0900

rubygems 1.8.5 を import しています。差分が大量なのでパス。オブジェクトの構造(インスタンス変数のもちかた)をかなり変えているようですね。大部分はリファクタリングだと思いますが、大きな変更点は埋もれてぱっと見にはよくわかりません。
あとソースディレクトリと別のディレクトリでビルドしているとテストがエラーになってるようです。

nobu:r31886 2011-06-01 13:05:03 +0900

r31885 の追加ファイルの svn property 変更や空白の除去など。

ryan:r31887 2011-06-01 14:12:55 +0900

minitest 2.2.1 をマージしています。Minitest::Spec という RSpec みたいにテストを記述するクラスのネストしたクラスでの teardown メソッドへの対応とか、Minitest::Assertions#diff を追加して assert_equal などで一致しなかった時に内容が大きかったら diff を取ってそれを表示するなどの変更が入っています。

nobu:r31889 2011-06-01 15:40:55 +0900

rubygems のマージで DIRECTORIES という定数が消えたので tool/rbinstall.rb で gems のディレクトリを探すのに Gem.ensure_gem_subdirectories を利用するように変更しています。

nobu:r31890 2011-06-01 15:41:33 +0900

TestSyntax#test_syntax で assert にひっかかった時にスクリプト名をメッセージに含めるようにしています。

nobu:r31891 2011-06-01 15:42:23 +0900

parse.y にて peek_n() という新しい関数マクロを導入して n 文字先の文字を覗きみるようにしています。また条件判定部分をマクロとして切り出しています。

kosaki:r31892 2011-06-01 17:20:16 +0900

未使用の定数マクロを削除。

kosaki:r31893 2011-06-01 22:03:25 +0900

native_sleep でスリープ時間の計算の間違いで小数点以下の秒数が usec -> nsec の変換漏れで 1000 分の 1 になってしまっていたのを修正。 [ruby-dev:43606] [Bug #4808]