ruby-trunk-changes r43200 - r43218

今日は frozen 文字列リテラルの実装と LazySweep の影響で使用しているオブジェクトが解放されてしまう可能性があった不具合の修正がありました。

knu:r43200 2013-10-08 21:42:37 +0900

misc/ruby-mode.el の predceging-char -> preceding-char の typo 修正。

nobu:r43201 2013-10-08 22:50:50 +0900

r43199 で入った test/-ext-/debug/test_profile_frames.rb の行末の空白を除去。

nobu:r43202 2013-10-09 00:34:40 +0900

IO#write の実装で rb_funcall() を rb_funcallv() を利用するように置き換えています。 不要な alloca(3) の利用を抑制するのが目的みたいです。

svn:r43203 2013-10-09 00:34:46 +0900

version.h の日付更新。

nobu:r43204 2013-10-09 00:56:01 +0900

require の排他のための load_lock() で同じファイルを複数のスレッドで同時にロードしようとした時に $VERBOSE が真の時にバックトレースを出力するのプロセスの標準出力ではなくて $stderr に格納されている IO ストリームに出力するようにしています。 $stderr に代入しても C レベルの stderr はすりかえられないので $stderr を考慮するようにしています。

ko1:r43205 2013-10-09 09:21:51 +0900

r43170 で追加した C API で取得できるプロファイラ向けのスタックフレーム情報から full label を取り出す C API rb_profile_frame_full_label() を追加しています。 full label は caller とかで取得できるような、メソッド名や、ブロックの場合はどのメソッドのブロックかを表示するもので、full label はメソッド名をクラス/モジュール名も表示したものです。将来のバージョンでは label と full label は同じものにするかもしれないとのことです。

nobu:r43206 2013-10-09 12:11:49 +0900

test/ruby/test_require.rb の require のロック競合のテストで警告を出力させるために $VERBOSE を true に設定して実行するようにしています。

nobu:r43207 2013-10-09 13:27:39 +0900

r43205 で追加した rb_profile_frame_full_label() で不要な文字列オブジェクトの生成を抑えるリファクタリング

nobu:r43208 2013-10-09 13:53:18 +0900

Comparable を include/extend しているけど <=> メソッドが定義されていないオブジェクトを Range.new に渡した時に相互に委譲しあって無限ループのような状態になっていたので thread.c の再帰検出つきで呼び出してエラーにするようにしています。 [ruby-core:57736] [Bug #9003]

nobu:r43209 2013-10-09 17:39:28 +0900

TracePoint のオブジェクト確保等のイベントのテストで GC.stat と照らしあわせていたところで解放数の確認に GC.stat[:heap_final_num] を加味しています。

nobu:r43210 2013-10-09 17:40:18 +0900

rb_fstring() で freeze された文字列を生成した時に文字列をテーブルで管理して共有しているため、生成した文字列が GC が走って mark から漏れたけど、LazySweep のためまだ sweep されていないという状態で同じ文字列を rb_fstring() で返した後で sweep されると、利用中のオブジェクトが回収されてしまうという不具合があったため、rb_fstring() で lookup された時に mark しておくようにしています。 [ruby-core:57756]

nobu:r43211 2013-10-09 17:41:13 +0900

テストで minitest の assert_raises のかわりに test/unit の assert_raise を利用するように変更しています。

nobu:r43212 2013-10-09 17:43:12 +0900

標準添付ライブラリの test/unit の Test::Unit::Assertions#assert_raise_with_message が捕捉した例外オブジェクトを返すようにして、これまで assert_raise を使っていたところを置き換えるリファクタリングをしています。

nobu:r43213 2013-10-09 17:45:30 +0900

テストで interned? の呼び出しがないことを assert_not_send でチェックしていたのを assert_not_interned を使うように書き換えています。 assert_not_interned? と "?" つきのメソッド名に typo していたので次の r43214 で修正しています。

nobu:r43214 2013-10-09 18:03:03 +0900

r43213 の assert_not_interned? -> assert_not_interned の typo 修正。

nobu:r43215 2013-10-09 18:03:07 +0900

Module#attr_reader, attr_writer, attr_accessor などで引数に不正な文字列が渡された時に発生させる NameError 例外のメッセージに、引数の属性名のエンコーディングを反映させるようにしています。

kazu:r43216 2013-10-09 22:23:07 +0900

r43208 と r43210 の ChangeLog エントリの typo 修正。

nobu:r43217 2013-10-09 22:27:51 +0900

r43215 の Module の attr 系のメソッドに渡された不正な文字列のエンコーディングを保持する変更のテストで、文字列のエンコーディングがテスト実行中の default_internal もしくは default_external と異なる場合は String#inspect で quote して比較するようにしています。

nagachika:r43218 2013-10-09 23:14:52 +0900

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