ruby-trunk-changes r34953 - r34955

今日はお昼に更新します。Psych.load_stream が複数の document のある YAML のパースを効率的に処理できる機能が追加されています。また Enumerable#lazy のテストが追加されています。

tenderlove:r34953 2012-03-09 06:21:52 +0900

Psych.load_stream で YAML の複数のドキュメントが連結されているものを読む時に、全体を読んでから結果をまとめて返すことしかできなかったので、ブロック渡しで呼ぶと 1つのドキュメントを読み込む毎にそのブロックに結果をブロックパラメータとして渡して呼ぶように、逐次実行できるようにする機能を追加しています。 [ruby-core:42404] [Bug #5978]

tenderlove:r34954 2012-03-09 06:31:05 +0900

Psych が複数の document を逐次読み込めるようになったのに対応して、Psych.parse も全体を parse してから最初の document を取り出すという実装になっていたものを、ブロック付き呼び出しをして、最初の document のパース結果が得られたらそこで処理を止めて返すようにしています。このため複数 document の YAML の最初の部分だけ欲しい時の Psych.parse が高速になります。

nobu:r34955 2012-03-09 10:13:59 +0900

r34951, r34952 で追加した Enumerable#lazy のテストスクリプトが追加されています。 __FILE__ でテストスクリプト自身を読み込ませているテストなどあっておもしろいですね。 lazy の挙動についてはチケットの議論もありますがテストを見るのも簡潔にまとまっていていいと思います。要は必要な要素までしか yield していないのがわかると思います。