ruby-trunk-changes r42354 - r42374

今日も主に bignum.c のリファクタリングと Array#zip の最適化がありました。

naruse:r42354 2013-08-03 21:23:01 +0900

test/rubygems/test_gem_commands_install_command.rb に require 'rubygems/rdoc' を追加しています。

akr:r42356 2013-08-03 22:27:25 +0900

bignum.c の big2str_orig() 等の引数を VALUE から BDIGIT の配列で数値を渡すようにしています。

akr:r42360 2013-08-03 23:20:31 +0900

bignum.c の bary_mul() や bary_mul_toom3_branch() で利用する乗算のアルゴリズムの決定に数値の大きさをチェックしているところで、大きいほうの数をチェックしていたのを小さいほうの数をチェックするように変更しています。 Karatsuba や Toom3 といったアルゴリズムは乗算の両辺の数が大きい時に効率的なのだそうです。

akr:r42361 2013-08-04 00:26:04 +0900

bignum.c のリファクタリング。 BDIGIT_DBL と BDIGIT の配列の変換処理を関数として切り出して各所で呼び出すようにしています。

svn:r42362 2013-08-04 00:26:09 +0900

version.h の日付更新。

nobu:r42363 2013-08-04 00:41:31 +0900

bignum.c の power_cache_get_power() の前方宣言で inline がついていなかったためコンパイラ警告が発生していたのを修正しています。

akr:r42364 2013-08-04 01:01:14 +0900

bignum.c の big2str_karatsuba() で一時バッファを確保する条件を緩和して、不要な場合に確保しないようにしています。

akr:r42365 2013-08-04 01:58:30 +0900

bignum.c のリファクタリング。 BDIGIT の配列表現の上位ワードの0の部分を切り詰めてサイズを必要最小限にする処理を BARY_TRUNC() として切り出して各所で使うようにしています。なんかそういう関数もあったような気が……bigtrunc() か。こちらは VALUE 型の引数を受け取ってオブジェクトの内容を変更する関数ですね。

headius:r42366 2013-08-04 06:53:54 +0900

拡張ライブラリ stringio の strio_substr() で len が 0 の時に空文字列を返すショートカットを追加しています。 StringIO#seek でポインタを内部の文字列のバッファよりも超えた位置に移動して read(0) を呼ぶと不正なポインタで関数呼び出しをしてしまう不具合があったそうです。 [ruby-core:56365] [Bug #8728]

akr:r42367 2013-08-04 07:15:26 +0900

README.EXT と README.EXT.ja に rb_integer_pack() と rb_integer_unpack() の関数名を追記しています。

nagai:r42372 2013-08-04 10:31:39 +0900

拡張ライブラリ tk の extconf.rb で Mac OS X でオプションに "-ltk -ltcl" を追加しているのをやめています。 不必要なライブラリをリンクしてしまうためとのこと。

glass:r42374 2013-08-04 21:24:26 +0900

Array#zip の最適化なのですがブロックパラメータが複数あった時の一時バッファに Array オブジェクトを使うようにしたのを再度 ALLOCA_N() を使って確保するようにしています。一応引数の数をチェックして多すぎる時は最適化をあきらめるようにしていますが、大きい時は自動的に String オブジェクトを利用した ALLOCV_N() と ALLOCV_END() を使うといいんじゃないかと思いました。