ruby-trunk-changes r41989 - r42009

今日は gc.c のリファクタリング(?)、bignum.c の最適化、マルチバイト NUL 終端文字対応の続きなどがありました。

zzak:r41989 2013-07-16 03:27:23 +0900

numeric.c の rdoc 用コメントの全体的なマークアップの修正や見易く整形したりなど。

svn:r41990 2013-07-16 03:27:29 +0900

version.h の日付更新。

zzak:r41991 2013-07-16 08:16:26 +0900

拡張ライブラリ bigdecimal で組み込みのクラスを拡張している ext/bigdecimal/lib/bigdecimal/util.rb で各組み込みクラスの rdoc 用コメントを追加しています。

glass:r41992 2013-07-16 11:22:17 +0900

昨日 r41983 で追加した rb_block_arity() でブロックが渡されていない時に呼ばれたら ArgumentError を発生させるようにしています。

glass:r41993 2013-07-16 11:25:54 +0900

io.c の appendline() の if 文の条件部分で代入していたのを、 if 文の前に出しています。

nobu:r41994 2013-07-16 13:32:09 +0900

r41964 を revert しています。マルチバイトの NUL 終端文字対応の一連の変更で enc_set_index() で終端文字の拡張もするようにしていたのですが、この関数は最初にエンコーディングを関連付ける時にも呼ばれる場合があるため元のエンコーディングを意識した処理を行う rb_str_fill_terminator を呼ぶのはまずかったそうです。

ko1:r41995 2013-07-16 15:00:55 +0900

gc.c のリファクタリング、だそうですがテストが失敗していたらしく次で revert されています。

ko1:r41996 2013-07-16 15:10:56 +0900

r41995 で test-all が失敗するようになったそうで revert しています。

kazu:r41997 2013-07-16 15:44:53 +0900

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

ko1:r41998 2013-07-16 16:33:48 +0900

gc.c の lazy_sweep() のループのリファクタリング。 is_lazy_sweeping() マクロを利用しないようにするのと一時変数を使って objspace->heap.sweep_slots を何度も参照しないようにしています。

ko1:r41999 2013-07-16 17:32:32 +0900

gc.c のリファクタリングみたいです。変数名の変更や free_list の操作を関数にまとめたりといった変更が行なわれているっぽいです。いろいろまとめて変更されてるので副作用がないのかいまいち自信がないですが……。

ko1:r42000 2013-07-16 17:46:15 +0900

gc.c から r41999 で追加した heaps_add_freeslot() で link_free_heap_slot() をおきかえています。

akr:r42001 2013-07-16 18:37:42 +0900

bignum.c の bary_mul_karatsuba() と bary_mul_toom3_branch() で引数に渡された整数(を表現する BDIGIT の配列)が同一のもの(二乗の計算)だったら不要なバッファの生成等を行なわないように最適化しています。

nobu:r42002 2013-07-16 18:45:00 +0900

r41994 の変更をカバーする UTF-16UTF-32エンコーディングの文字列での String#split のテストを追加しています。 [ruby-core:56036] [Bug #8642]

nobu:r42003 2013-07-16 18:50:11 +0900

Array#count の rdoc 用コメントの修正。 比較のために == メソッドを使っているのに === メソッドを使うと書かれていたのを修正しています。

akr:r42004 2013-07-16 19:08:25 +0900

bignum.c のシフト処理にて、シフト量が大きすぎると例外を発生させていたのですが、左シフト時は問題ですが右シフト時は元の数のビット数を越えたらいくら大きくても同じなので、エラーにしないようにしています。

ko1:r42005 2013-07-16 19:29:31 +0900

gc.c の新しいオブジェクトを確保する処理を書き直しています。struct objspace::freelist というフィールドを追加して free_slots の freelist のショートカットを保存するようにしているみたいです。その他関数の構成を変更したり。

akr:r42006 2013-07-16 19:44:27 +0900

bignum.c で不要になったマクロ定義を削除しています。

akr:r42007 2013-07-16 20:23:03 +0900

bignum.c の bigsrq() という関数を bigsq() に改名しています。はて、なぜでしょう。

glass:r42008 2013-07-16 21:13:19 +0900

configure で strcasecmp(3) の存在チェックをして st.c で独自の実装 st_strcasecmp() を使っていたところを可能なら strcasecmp(3) で置き換えるようにしています。strcasecmp(3) って locale によって大文字小文字の判定が変化したりしませんでしたっけ?

glass:r42009 2013-07-16 21:49:01 +0900

と思ったらやっぱり問題ありとされたらしく r42008 の strcasecmp(3) を使うようにする変更は revert されています。