ruby-trunk-changes r45638 - r45643

normal: r45638 2014-04-20 06:24:45 +0900

RGenGC で minor GC の回数を減らすために大きなサイズの Array や Hash はその Array/Hash オブジェクト自体でなく参照先のほうを remember set に登録するように特別扱いしていましたが、それにより大きな Array や Hash を操作するとメモリ消費量が大きくなる(GC が走らない)のでやめています。 [ruby-core:60699] [Bug #9518]

svn: r45639 2014-04-20 06:24:49 +0900

version.h の日付更新。

nobu: r45640 2014-04-20 08:41:36 +0900

標準添付ライブラリ mkmf.rb で linker のチェックをする際に利用する変数の $LIBPATH と $DEFLIBPATH の優先順位を修正して $LIBPATH のほうを優先して参照するようにしています。 [ruby-core:62100] [Bug #9760]

nobu: r45641 2014-04-20 09:12:15 +0900

拡張ライブラリ win32ole のいくつかの関数で引数の型を long から LONG に変更してコンパイラ警告を抑制しています。 LONG という型を宣言しているところがみあたらなかったので多分 Win32OLE での型でしょう。いくつか呼んでいる Windows 独自の関数を(SafeArrayPutElement とか SafeArrayGetDim)を調べてみたけどその型は long を使っていたので、多分実際には long と同じなのではないかと思います。

tarui: r45642 2014-04-20 12:58:22 +0900

Hash#each などのメソッドのブロック内で callcc で Continuation を生成して後からブロック内に再入した時のために、pack された Hash オブジェクトの場合インデックスを毎回 find_packed_index_from() で再計算しているのですが、このために Hash のキーに Array など破壊的変更のできるオブジェクトを利用して、格納した後でその内容を変更して hash & eql で同一と判定されるキーが2つある状態にすると、インデックスが先に進まなくなってしまって無限ループする不具合を解消しています。 インデックス再計算をしている時に現在のオフセットからの再計算にすることで後戻りを防いでいます。 callcc での再入でイレテータを戻すことはできなくなりますが、まあ同一キーを作ってしまうケースと比較してどっちがありそうかってことでしょうか。 [ruby-dev:48047] [Bug #9646]
なお callcc を生で使うのは推奨されません。大抵の場合 Fiber で代替できるでしょう。

nobu: r45643 2014-04-20 19:31:29 +0900

r45642 の ChangeLog エントリの typo 修正。