ruby-trunk-changes r34221 - r34231

今日は GC の Bitmap Marking がコミットされました。

nagachika:r34221 2012-01-07 00:52:44 +0900

configure.in で CANONICALIZATION_FOR_MATHN というマクロを定義するのが RUBY_API_VERSION_MAJOR が 1 の時だけになっていたため、2.0.0 にアップデートすることで mathn に必要なシンボル(関数)が定義されなくなってしまったので、条件を消しています。 [ruby-dev:45100] [Bug #5852]

svn:r34222 2012-01-07 00:52:48 +0900

version.h の日付更新。

nari:r34225 2012-01-07 23:02:23 +0900

GC の Bitmap Marking がコミットされています。 [ruby-dev:45085] [Feature #5839]
CRuby の GC は Mark&Sweep ベースで、これまではマークを各オブジェクトの struct RVALUE に埋め込まれている flags のなかのビットを使って表現していたのですが、これだと GC するたびに全てのオブジェクトスロットの領域にメモリ書き込みが行なわれるため、fork してそのまま動作する時にせっかく Copy On Write で共有できるかもしれないメモリ領域が必ず複製されてしまうため、一部のアプリケーション(まあ passenger 用ですかね)でメモリ使用量が増えてしまいます。マーク用の領域をオブジェクトそのものとは別に bitmap として持つようにすることで複製される領域を抑えるようにしています。
また struct heap_slot から実際のオブジェクトの配列はポインタで持っていた(別途確保していた)のを、struct heap_slot の後に連続したメモリ領域に確保するようにしたり、freelist をヒープスロット毎に持つようにしたり、アライメントされたメモリ確保するために posix_memalign(3) など(プラットフォームによっていろいろ)を利用するようにしたりしています。 free list の配置替えについては完全に理解できていないのでもうちょっとよく読みたいです。
slot_sweep() に fprintf で標準エラー出力にメッセージ出しているのはデバッグ用出力の消し忘れでしょうか?

naruse:r34226 2012-01-08 00:13:37 +0900

Bitmap Marking の変更で利用する posix_memalign memalign のチェックを configure に追加して、その結果を条件コンパイルに利用するようにしています。

svn:r34227 2012-01-08 00:13:41 +0900

version.h の日付更新。

naruse:r34228 2012-01-08 00:21:06 +0900

正規表現の \b (単語境界にマッチ)とマルチバイト文字を含む文字列/正規表現のテストを追加しています。

naruse:r34229 2012-01-08 00:21:09 +0900

Object#inspect の rdoc の typo 修正。

kosaki:r34230 2012-01-08 00:47:45 +0900

gc.c の 64bit 環境でのコンパイラ警告の除去するようにキャストの変更。

ayumin:r34231 2012-01-08 01:22:47 +0900

test_old_thread_select.rb の select(2) のタイムアウト時間のチェックが Snow Leopard でもひっかかることがあるので skip するようにしています。 [ruby-dev:45108] [Bug #5858]