ruby-trunk-changes r30432 - r30439

今年最後の ruby-trunk-changes です。本日はメソッド定義時のGC避け不足で本来呼ばれるはずのメソッドではないメソッドが呼ばれるという潜在的な不具合の修正が入っています。この不具合はおそらくtrunk限定でリリースブランチには入っていないと思います。

wanabe:r30432 2010-12-30 23:17:32 +0900

[Bug #4178] [ruby-dev:42832] で報告されているように、GC.stress=true の状態で本来のメソッドとは異なるメソッドが起動されているかのようなことが起きる現象の修正です。メソッド定義時にiseqをcloneしているところでコンパイラの最適化によってはcloneしたiseqがレジスタやメモリに残らずにGCされてしまいこのような現象になるみたいです。

kazu:r30433 2010-12-31 03:03:13 +0900

r30429 で Makefile.in の行継続を削除した結果不要になったセミコロンを削除しています。

svn:r30434 2010-12-31 03:03:15 +0900

version.h の日付更新。

naruse:r30435 2010-12-31 03:53:41 +0900

Time#strftime('%s') がオーバーフローによって化けるのを修正。[Bug #4221][ruby-core:33985]

akr:r30436 2010-12-31 10:28:41 +0900

st.c の関数マクロの引数にかっこをつける修正です。左辺値にする時にもかっこをつけるんですね。

nobu:r30437 2010-12-31 11:16:00 +0900

ext/zlib/zlib.c で sizeof() の返り値を誤って int として扱っていたので、#define でキャスト付きの定義で上書きしてしまっています。

nobu:r30438 2010-12-31 11:46:50 +0900

[ruby-core:33815] の議論はあまりちゃんと読んでいないのですが、標準添付の拡張ライブラリ以外では RbConfig["warnflags"] の設定は使用しないようにしています。不要に過剰に警告が出たりエラーになってコンパイルが通らないのがよくないみたいな話でした。各ライブラリの開発者側としては警告はできるだけ出した方がいいとおもいますが、単にインストールしたいユーザにとっては確かに邪魔でしょうね。
[追記]コメントで教えて頂きました。RbConfig["warnflags"]全部消しているのではなく -Werror=... で警告をエラーに切り替えているフラグを殺して警告だけにしているそうです。警告自体が消えるわけではないようです。[/追記]

akr:r30439 2010-12-31 12:02:53 +0900

Enumerable#sort_by で各要素の値とブロックの返す値(ソートのキー)を並べた要素数の2倍の一時配列を利用して、一時オブジェクトの数を減らしているそうです。

今日で ruby-trunk-changes も4か月続きました。自分ではずっとやっていた様な印象で、まだそれだけしか経っていないのかという感じです。間違いも多くて、皆さんのコメントで補完してもらえてやっと完成するコンテンツです。いつもありがとうございます。
この企画誰得だよとおもいつつ始めましたが、思いの外注目を集めたのでびっくりしました。けどまあやっぱり自分にとって一番有益だったなぁと思います。自分得企画。やりやすい仕組みはそれなりにできて、最近はすっかり慣れてきたので、まだ続けられそうです。来年もよろしくお願いします。