今日も主に bignum.c のリファクタリングと、GC の修正がありました。
tarui:r41322 2013-06-16 02:06:15 +0900
gc.c のリファクタリング。 GC_PROFILE_MORE_DETAIL の有無で追加の処理を関数まるごと分岐していたのを関数内の分岐するようにしています。
tarui:r41324 2013-06-16 05:18:11 +0900
GC_PROFILE_MORE_DETAIL が真に定義されていた時に収集する GC の profile 情報を追加しています。
tarui:r41325 2013-06-16 05:53:01 +0900
GC の修正で malloc(3) によるメモリ確保時に allocate_increase にげたをはかせているみたいで、GC が頻発するのを防いでいるそうですが、GC のパラメータ把握できてないのでどういう理屈なのかちょっとわからないです。あとこれはいつからの問題なのでしょうか。 LazySweep からなら 1.9.3 と 2.0.0 にもバックポートしたほうがいいでしょうか。
akr:r41326 2013-06-16 08:46:07 +0900
bignum.c のリファクタリング。 bary_divmod() という BDIGIT 配列のまま除算を計算する関数を新設してそれを使うようにしています。 また bigdivrem() から bigdivrem_num_extra_words() という関数を括り出しています。この関数内の assert() 文はあきらかに常に成り立つはず(BIGDIVREM_EXTRA_WORDS が 2 なら)ので冗長ではないでしょうか。
akr:r41327 2013-06-16 08:56:32 +0900
bignum.c のリファクタリング。 bigdivrem() で bigdivrem_single() の戻り値を受け取るのに BDIGIT_DBL を使っていたのを BDIGIT で受け取るようにしています。
akr:r41328 2013-06-16 10:41:58 +0900
bignum.c のリファクタリング。 BDIGIT の配列のまま加算を計算する bary_add() を追加して、これを利用するようにしています。 これで四則演算が揃いましたね。 その他 bary_mul() と bary_divmod() の引数の型修正などもありました。
kou:r41329 2013-06-16 11:02:33 +0900
NEWS ファイルに r41286 での XMLRPC::Client#http メソッドの追加について追記しています。 [ruby-core:55197] [Feature #8461]
akr:r41330 2013-06-16 14:33:39 +0900
bignum.c のリファクタリング。 rb_integer_pack_internal() から bary_pack() を切り出してこれを再利用するようにしています。ここでも r41312 と同様に bary_pack() の結果と rb_integer_unpack() の結果をチェックする assert() 文が追加されていますね。新設した関数なので sanity check を入れているということでしょうか。
naruse:r41331 2013-06-16 16:10:17 +0900
r41293 で追加した config.guess, config.sub を GNU のサイトからダウンロードするためのツール tool/config_files.rb で Symbol のブロック引数渡しの記法が利用されていたので 1.8.5 でも動くように URI.read を使うようにしています。むしろ URI.read を知らなかった。こんなことができるんですね。
naruse:r41332 2013-06-16 16:10:20 +0900
.gitignore にダウンロードされる tool/config.guess と tool/config.sub を追加しています。
naruse:r41334 2013-06-16 17:24:09 +0900
r41331 の URI#read を使うようにする修正で引数を渡すメソッドの間違いを修正しています。
akr:r41335 2013-06-16 17:49:26 +0900
bignum.c の absint_numwords_generic() で rb_funcall() を用いてメソッド呼び出しで計算していた部分を削っています。同様に bary_pack() と rb_integer_unpack() の結果を比較していた assert() 文も削っていて、やっぱりこのあたりは元々ある計算とダブルチェックをしていたみたいですね。
akr:r41336 2013-06-16 18:53:45 +0900
bignum.c の rb_integer_pack_2comp() という別の関数として分離されていたのを削って、flags 引数に INTEGER_PACK_2COMP というビットフラグを追加してこれで指定できるようにしています。
akr:r41337 2013-06-16 21:59:26 +0900
bignum.c のリファクタリング。 bary_2comp() という関数を get2comp() から括り出し、integer_unpack_num_bdigits() を rb_integer_unpack_internal() から括り出し、bary_unpack_internal() を bary_unpack() から括り出して INTEGER_PACK_2COMP フラグのサポートを追加、rb_integer_unpack_internal() と rb_integer_unpack_2comp は削除する、などなど r41336 の変更に追随するための関数の呼び出し関係の再構築をしている感じです。