ruby-trunk-changes r42119 - r42141

今日は bignum.c のリファクタリングRubyGems の最新版のマージ、拡張ライブラリ openssl の不具合修正/スレッドセーフ化の再修正、そのために native thread を対象とする lock/condition variable などの名称を変更するリファクタリングなどがありました。

akr:r42119 2013-07-23 01:36:36 +0900

bignum.c のリファクタリング。 bigdivrem1() から bigdivrem_mulsub() という関数名で BDIGIT の配列表現の Bignum に BDIGIT をかけて別の BDIGIT 配列から引く処理を切り出しています。言葉で説明するのだいぶツラい感じですね。また加算処理を bary_add() を呼び出すようにしています。

svn:r42120 2013-07-23 01:36:40 +0900

version.h の日付更新。

akr:r42122 2013-07-23 03:35:27 +0900

bignum.c のリファクタリング。 乗算アルゴリズムの選択条件の不等式を KARATSUBA_BALANCED() と TOOM3_BALANCED() とし定義して利用するようにしています。

akr:r42123 2013-07-23 07:16:45 +0900

bignum.c のリファクタリング。 bary_mul_toom3() から BDIGIT の配列で表現される Bignum に 1 つの BDIGIT をかけ算する処理を bary_mulsub_1xN として切り出しています。あれ、なんかこれ r42119 でみたのと同じような処理だな、と思ったら r42119 で作成された bigdivrem_mulsub() を利用して実装しなおされていました。

drbrain:r42124 2013-07-23 07:46:50 +0900

RubyGems の master ブランチからマージ(commit hash: b165260)しています。プラグインのロードパスの検索の変更や証明書の扱いについての処理をメソッドとして切り出すリファクタリング(変更もあるかも?)、dependency サブコマンドの実装の変更(リファクタリング?)、install サブコマンドの(以下略)などなど、大量の変更があります。

zzak:r42125 2013-07-23 08:15:15 +0900

標準添付ライブラリ rexml の REXML::StreamListener#entitydecl の rdoc 用コメントで結果の表示が間違っていたのを修正しています。主にエスケープ不足。 [ruby-dev:47533] [Bug #8665]

drbrain:r42126 2013-07-23 08:44:53 +0900

拡張ライブラリ openssl に含まれている ASN1 のデコードの実装で時刻のデコードに YYMMDDhhmmZ のように sec が省略された表記に対応するようにしています。 [ruby-core:56108] [Bug #8664]

zzak:r42127 2013-07-23 09:28:24 +0900

lib/drb/invokemethod.rb でモジュール名に rdoc の :nodoc: タグを追加しています。

zzak:r42128 2013-07-23 09:35:57 +0900

sample/drb/README.rd(.ja) を sample/drb/README(.ja).rdoc に改名しています。

nobu:r42129 2013-07-23 09:37:35 +0900

r42128 で追加されたファイルの svn property 設定。

nobu:r42130 2013-07-23 10:12:41 +0900

いくつかのファイルの svn property の設定。なぜか別のパスのファイルも検出されたみたいです。

ko1:r42131 2013-07-23 16:02:44 +0900

gc.c で空きスロットの処理の変更。 struct objspace に using_slot という struct heap_slot へのポインタのメンバを追加して struct heap_slot::freelist を struct objspace の freelist にキャッシュ中の slot を記憶しておくようにしています。また struct objspace::freelist に struct heap_slot::freelist をキャッシュしている間は struct heap_slot::freelist は NULL にしておいて、コピーではなくて移動するようにしているようです。操作ミスを防ぐためかなぁ。

ko1:r42132 2013-07-23 16:15:34 +0900

gc.c の空行除去。

ko1:r42133 2013-07-23 18:53:14 +0900

thread_native.h というヘッダファイルを追加して、rb_thread_lock_t を rb_nativethread_lock_t と改名してロック関連の関数のプロトタイプ宣言を vm_core.h からここに移動しています。

nobu:r42134 2013-07-23 18:58:34 +0900

r42133 で新規追加されたファイルの svn property を設定。

ko1:r42135 2013-07-23 18:59:28 +0900

拡張ライブラリ openssl で OpenSSL の関数をスレッドセーフに呼ぶための r41806 で追加したロックを rb_mutex_t の Mutex オブジェクトによるものではなくて r42133 で追加した rb_nativethread_lock_??? を使うようにしています。 rb_mutex_??? は Ruby の Thread でのみ使えるもので、別に起動された native thread では使えないため(たとえば例外が発生した時など Ruby が作る Thread でないと底のほうで待っている TAG がないので不正なジャンプになってしまうなどなど)。 [ruby-core:54900] [Bug #8386]

ko1:r42136 2013-07-23 19:38:36 +0900

rb_thread_id_t を rb_nativethread_id_t に改名しています。

ko1:r42137 2013-07-23 19:46:37 +0900

現在の native thread を返す rb_nativethread_self() (pthread だと pthread_self()、Windows 版では GetCurrentThread())を追加しています。
ところで nativethread の API 群は公開(include/ruby 以下にヘッダを置くという意味で)はしなくていいんでしょうか。

ko1:r42138 2013-07-23 19:50:32 +0900

rb_thread_cond_t も native thread を対象としたものなので rb_nativethread_cond_t に改名しています。

akr:r42139 2013-07-23 20:16:39 +0900

bignum.c の bary_divmod() で x < y のケース(商は 0 で余剰が x)と、x と y が共に 2要素(BDIGIT 2つぶん)だった時の特別扱いの実装を追加しています。

akr:r42140 2013-07-23 20:49:25 +0900

bignum.c で bigdivrem() の関連の構造体や関数をファイルの前のほうに移動しています。特に前置プロトタイプ宣言の削除はないので単に関数群のグルーピングのためかと思われます。

naruse:r42141 2013-07-23 23:19:51 +0900

拡張ライブラリ openssl の OpenSSL の関数をスレッドセーフに呼ぶための対応の追加修正。 extconf.rb で OpenSSL 側の CRYPTO_THREADID::ptr の存在チェックを行い、可能であれば OpenSSL 1.0.0 以降実装されているという CRYPTO_THREADID_set_pointer() を利用するようにしています。 また現在のスレッドの識別子として Thread オブジェクトの id を使おうとしていたところを rb_nativethread_self() を利用するようにしています。 [ruby-core:54900] [Bug #8386]