ruby-trunk-changes r42096 - r42115

今日は GC の不具合修正や eval 内での __dir__ の再修正などがありました。

akr:r42096 2013-07-21 21:13:47 +0900

bignum.c の bary_mul() で数値が小さい時のシンプルな実装に切り替える条件に x だけでなく y の値も考慮するようにしています。また bigsq() で bigmul0() を利用していたのを bary_sq_fast() もしくは bary_mul() (BDIGIT 配列を利用するバージョン)を利用するように再実装して、小さい数の時に簡易な実装に切り替えるようにしています。

akr:r42097 2013-07-22 00:17:09 +0900

bignum.c の bary_sq_fast() でループ内で固定の値の関数マクロ呼び出しをループの外に出す最適化と、もうひとつ結果を格納するバッファの書き込み部分の書きかえをしているのですが、後半の変更はオーバフローが起きうる形に変更されていて、等価書きかえではないような気がします。

svn:r42098 2013-07-22 00:17:13 +0900

version.h の日付更新。

nobu:r42099 2013-07-22 02:27:40 +0900

sample/optparse/opttest.rb のコーディングスタイルの変更です。主にブロックの書きかたを変更しているのですが、ブロップパラメータの |...| の前で改行されているのはあまり見ないスタイルのような…

nobu:r42100 2013-07-22 03:16:00 +0900

拡張ライブラリ date の Date.rfc2822 で wday (曜日)が省略された時を考慮するようにしています。

kouji:r42101 2013-07-22 09:37:10 +0900

拡張ライブラリ readline に line_buffer の編集のために Readline.delete_text メソッドを追加しています。 リンクする readline/editline ライブラリが対応していれば編集中のテキストの変更が楽にできるようになります。 [ruby-dev:45789] [Feature #6626]

nobu:r42102 2013-07-22 09:48:35 +0900

r42101 で readline に入った実装が未サポートになった rb_ensure(4) を含んでいたので RUBY_SAFE_LEVEL_MAX を渡すようにしています。

nobu:r42103 2013-07-22 09:48:38 +0900

__dir__ が eval 内で nil を返す問題([Bug #8436])の追加修正で、第3引数にファイルパスが明示的に渡された時に nil を返していた不具合を修正しています。 [ruby-core:56099] [Bug #8662]

ko1:r42104 2013-07-22 10:10:46 +0900

r42004 の gc.c のリファクタリングで make test-all で大量のメモリを消費するようになって test_many_fibers_and_threads がタイムアウトするようになっていたのを修正しています。 gc_slot_sweep() で struct RBasic::flags が 0 の RVALUE スロット(の要素)を freelist に戻し忘れていたのを修正しています。

ko1:r42105 2013-07-22 13:00:12 +0900

Array の RGenGC 向けの変更です。 array.c に ary_memfill() という Write Barrier つきの関数を追加して Array.new で初期値が指定された時や Array#fill で利用するようにしています。 また Array#slice! の実装で Write Barrier が不要な時に RARRAY_RAWPTR() を利用するようにしています。

ko1:r42106 2013-07-22 13:21:01 +0900

Array の RGenGC 向け変更です。 ary_resize_capa() で読み込み専用で Write Barrier が不要なポインタの取り出しに RARRAY_RAWPTR() を利用するように変更しています。

kazu:r42107 2013-07-22 13:29:32 +0900

r42064 と r42073 の ChangeLogtypo 修正。

nobu:r42108 2013-07-22 16:32:52 +0900

Binding クラスの TypedData の型を指定する構造体を公開して eval 系のメソッドで Binding オブジェクトを rb_obj_is_kind_of() でチェックしていたのを Check_TypedStruct() を利用してチェックするようにしています。

nobu:r42109 2013-07-22 16:56:38 +0900

r41936 でコミット漏れしていた ext/win32/lib/win32/importer.rb を追加しています。

glass:r42110 2013-07-22 17:37:46 +0900

string.c の String#chars と String#codepoints の Enumerator#size 用のコールバック関数 rb_str_each_char_size() を単に rb_str_length() を呼ぶように変更しています。

glass:r42111 2013-07-22 17:42:52 +0900

r42110 の ChangeLogtypo 修正。

glass:r42112 2013-07-22 18:03:44 +0900

String#chars で配列を作る時にあらかじめ文字数ぶんのバッファを確保して初期化するようにしています。

glass:r42113 2013-07-22 18:42:15 +0900

String#codepoints や String#each_codepoint でも配列をあらかじめ文字数ぶんのバッファを確保して生成するように最適化しています。また文字数の取得のために encoding の取得もあらかじめしておいて rb_str_strlen() ではなくその中で呼ばれている str_strlen() を直接呼ぶようにしています。

nobu:r42114 2013-07-22 23:24:41 +0900

r42102 で Readline.delete_text の実装で rb_ensure(4) を消すようにしましたが、RUBY_SAFE_LEVEL_MAX を rb_ensure() に渡すようにしたのですが 4 が max とも限らないので(現実には今後増えることはないような気がしますが)、RUBY_SAFE_LEVEL_MAX が 4以上なら rb_ensure(4) を呼ぶように書きかえています。

nagachika:r42115 2013-07-22 23:53:20 +0900

r42075 で test/ruby/test_io.rb のテストメソッドを分解した時に同じ名前のメソッドを作ってしまっていたのを重複しないように改名しました。