ruby-trunk-changes r41824 - r41838

今日も bignum.c のリファタリングやテスト用メソッドの追加、Windows 環境での strict ANSI モードでのビルド対応、dl の win32/registry.rb のワイドキャラクタ対応などがありました。

akr:r41824 2013-07-07 23:01:40 +0900

bignum.c に乗算のアルゴリズムを指定して実行する rb_big_mul_normal()、rb_big_mul_balance()、rb_big_mul_karatsuba() という関数を追加しています。これらの関数はテスト用の拡張ライブラリから使われていて、アルゴリズム毎のテストのために使われるようです。

akr:r41825 2013-07-07 23:06:20 +0900

tool/ の svn property 設定。config.guess と config.sub を snv:ignore に追加しているようです。

akr:r41826 2013-07-08 00:21:26 +0900

bary_mul_karatsuba() のリファクタリング。条件分岐を整理して未使用のコードの削除などしているそうです。

svn:r41827 2013-07-08 00:21:31 +0900

version.h の日付更新。

akr:r41828 2013-07-08 08:04:25 +0900

bignum.c の bary_mul() で中間で生成した Bignum オブジェクトのコンパイラ最適化によるマーク漏れを防ぐため RB_GC_GUARD() を追加しています。

emboss:r41829 2013-07-08 08:30:42 +0900

拡張ライブラリ openssl のテストで OpenSSL::PKey::EC の利用可能なパラメータ(curves)のうち "Oakley" という種類のものは ECDSA に適していないのとデフォルトで OpenSSL に登録されていないため(というのが何を意味しているのかよくわかっていませんが)テストが失敗することがあるので、"Oakley" から始まる curbe はスキップするようにしています。 [ruby-core:54881] [Bug #8384]

akr:r41830 2013-07-08 20:56:55 +0900

bignum.c の bary_mul_balance() で可能なら中間データを置くためのメモリ領域の確保を避けて結果の BDIGIT の配列を使い回すようにしています。

akr:r41831 2013-07-08 22:00:11 +0900

bignum.c の bary_mul_balance() で未初期化のローカル変数があったので初期化を追加しています。コンパイラ警告抑制。

akr:r41832 2013-07-08 22:05:57 +0900

bignum.c の内部の関数のテストのために rb_big_sq_fast() と rb_big_mul_toom3() という関数を追加して、テスト用の拡張ライブラリから呼ぶようにしてテストを追加しています。

akr:r41833 2013-07-08 22:44:34 +0900

bary_mul() bary_mul_balance() ary_mul_karatsuba() で引数に中間データ用のバッファを外からも渡せるように BDIGIT *wds および size_t wl を追加しています。乗算処理は再帰的に呼び出し合うのでバッファをまとめて確保して使い回すことでオーバヘッドを減らすのが目的でしょうか。確保した領域の解放について変更していないのでまだ使っているのに解放したりしないのかなーと思いましたが、このバッファは rb_alloc_tmp_buffer() で確保されていてアンカー役の String オブジェクトが残っていれば解放されないし、ALLOCV_END() はそのオブジェクトが確保されていた時だけ呼ぶようにしているので大丈夫そうでした。

nobu:r41834 2013-07-08 23:12:26 +0900

win32/win32.c と thread_win32.c で _stdcall と _cdecl のかわりに __stdcall と __cdecl という WIN32 API 呼び出し規約の指定を使うようにしています。 strict ansi モードでこちらでないと使えないとのこと。 [ruby-core:55312] [Bug #8495]

nobu:r41835 2013-07-08 23:12:52 +0900

更に scrict ANSI モード用の修正。 finite() がマクロとして定義されていなかった時に関数のプロトタイプ宣言するように numeric.c に追加しています。 [ruby-core:55312] [Bug #8495]

nobu:r41836 2013-07-08 23:13:13 +0900

strict ANSI モード用の変更もうひとつ。 include/ruby/win32.h で inline 関数として定義していた rb_w32_pow() で使っている _controlfp() が strict ANSI モードでは使えないらしく win32/win32.c で #undef __STRICT_ANSI__ してから定義するようにしています。 [ruby-core:55312] [Bug #8495]

nobu:r41837 2013-07-08 23:23:24 +0900

win32/win32.c の CharNextExA() というマクロで古い VC6 でのコンパイラ警告除去のためキャストを追加しています。

nobu:r41838 2013-07-08 23:36:48 +0900

拡張ライブラリ dl に同梱されている Windows のレジトトリ操作用ライブラリ ext/dl/win32/lib/win32/registory.rb で利用する WIN32 API を WCHAR バージョンのものにして UTF-8 の文字列を扱えるようにしています。