ruby-trunk-changes r39803 - r39814

今日は GC の不具合修正や性能改善、Mac OS X でのバックトレース取得の独自実装追加などがありました。

naruse:r39803 2013-03-18 01:25:21 +0900

io.c の io_fillbuf() で rb_read_internal() がエラーを返した時にその file descriptor を例外メッセージに含めるようにしています。 CI でエラーになっているのをデバッグするためのようです。

svn:r39804 2013-03-18 01:25:26 +0900

version.h の日付更新。

zzak:r39805 2013-03-18 03:19:56 +0900

Array#delete の rdoc のサンプルコードの修正。 https://github.com/ruby/ruby/issues/258

naruse:r39806 2013-03-18 10:45:12 +0900

vm_exec.c の DECL_SC_REG() を定義するための条件コンパイルの条件で typo していたのを修正しています。

naruse:r39807 2013-03-18 11:06:44 +0900

r39517 を revert しています。 llvm-gcc でビルドする時に最適化されすぎで SEGV するのを避けるための workaround でしたが r39806 が根本的な修正だったみたいです。なるほどー。

naruse:r39808 2013-03-18 13:31:59 +0900

darwin(Mac OS X)では rb_bug() などで C のバックトレースを取得するために独自に定義した backtrace() 関数を利用するようにしています。 デフォルトの backtrace() がシグナルハンドラ内ではその元のスタックに辿れないので libexecinfo を利用して独自に対応した関数を定義しています。

usa:r39809 2013-03-18 14:47:37 +0900

WIN32OLE のテストで一時ファイルをソースディレクトリに作っていたのを一時ディレクトリを作ってそこに置くようにしています。

nari:r39810 2013-03-18 18:03:07 +0900

gc.c で RUBY_FREE_MIN 環境変数の設定を変更する(大きくする)と、ヒープの解放処理(システムに返す処理のことだと思います)が走らなくなってしまうのを避けるため objspace->heap.do_heap_free が initial_free_min を下回らないようにしています。 [ruby-core:53405] [Bug #8095]

nari:r39811 2013-03-18 21:44:55 +0900

gc.c で新たにヒープを確保するかどうかの判定に free されたスロット数から逆算した行きているスロット数を使っていたのを、マークされた数を保持するようにして、その数をベースに計算するようにして不要なヒープ確保を避けるようにしています。多分ですが Lazy Sweep によって、objspace_live_num() と実際にマークされて生きているオブジェクト数に乖離が出るようになったのでこのように対処する必要ができたということでしょう。 [ruby-core:53393] [Bug #8093]

nari:r39812 2013-03-19 00:30:02 +0900

r39811 の続きでそもそも objspace_live_num() の精度をよくするため objspace->total_freed_object_num および objspace->heap.free_num の管理を早めにインクリメントするようにしています。 [ruby-core:53392] [Bug #8092]

svn:r39813 2013-03-19 00:30:10 +0900

version.h の日付更新。

mrkn:r39814 2013-03-19 01:22:15 +0900

r32836 で Mac OS X で C コンパイラの種類($CC)によって C++ コンパイラの名前も変更するようにしているところでアーキテクチャのパターンマッチが darwin11.* を対象にしていたので darwin1*.*t として darwin10 や逆に darwin12 以降もマッチするようにしています。