ruby-trunk-changes r41714 - r41730

今日は Refinements の機能で Module#include した時に refine で定義した refinements も一緒に継承されるようにする機能追加がありました。その他 bignum.c のリファクタリング、文字列連結時のエンコーディングの処理の修正など。

charliesome:r41714 2013-06-30 22:40:10 +0900

標準添付ライブラリ prime.rb のコメントの typo や文法の修正。

nobu:r41715 2013-06-30 23:16:26 +0900

r41701 で指摘していた通常は不要な arg への代入が #ifdef DEFAULT_PROCESS_ENCODING の中に移動しています。

akr:r41716 2013-07-01 01:01:53 +0900

bignum.c の 整数の最下位ビットの位置を返す nlz() という関数の実装を nlz16(), nlz32(), nlz64(), nlz128() といった関数に別々に定義して BDIGIT のサイズによって適切な関数を使って nlz() を実装するようにリファクタリング
また rb_cstr_to_inum() で基数の bits_per_digit を計算するのに bitsize() を使うように書き変えています。

svn:r41717 2013-07-01 01:01:59 +0900

version.h の日付更新。

akr:r41718 2013-07-01 12:04:07 +0900

bignum.c の rb_cstr_to_inum() で先頭の 0 をスキップする最適化を追加しています。

shugo:r41719 2013-07-01 12:57:16 +0900

Module#refine で Refinements を定義した Module を別の Module に include するとその Module でも同じような refine を書いたかのように Refinements が取り込まれるという機能を追加しています。 実装をみるとどちらかというと main.using で引数の Module の ancestors まで見るようにするという変更です。 [ruby-core:55671] [Feature #8571]

nobu:r41720 2013-07-01 15:03:45 +0900

string.c の文字列連結を行なう rb_enc_cr_str_buf_cat() rb_str_append() で coderange を設定するのに空文字列の時を考慮するようにしています。昨日の変更の追加でしょうか?

nobu:r41721 2013-07-01 15:04:23 +0900

拡張ライブラリ stringio で StringIO#write の実装時に文字列を追加するのに rb_str_cat() のかわりに eb_enc_str_buf_cat() を読んで StringIO のエンコーディングを保存するようにしています。

nobu:r41722 2013-07-01 15:05:03 +0900

標準添付ライブラリ csv.rb で CSV#<< の実装で StringIO を利用している時にエンコーディングの指定のために毎回新しい StringIO オブジェクトを生成しなおしていたので StringIO#set_encoding を利用するように書き直して CSV.generate が遅い問題に対処しています。余分なオブジェクトを生成するだけでなく、String#force_encoding によりエンコーディングをセットすると coderange のキャッシュがクリアされて毎回エンコーディングを意識した処理が必要となりとても時間がかかっていたそうです。 [ruby-core:55714] [Bug #8585]

mrkn:r41723 2013-07-01 15:37:20 +0900

r41723 で修正された拡張ライブラリ bigdecimal の BigMath.exp の不具合は [ruby-core:47145] [Bug #6862] というチケットでも以前から報告があり、Heesob Park からパッチも提供されていたので、ChangeLog にクレジットを追加しています。

akr:r41724 2013-07-01 20:05:47 +0900

拡張ライブラリ socket で IPSocket.new にローカルアドレスの指定があった時の挙動を r41686 で変更しましたが、他に選択肢がないときはリモートアドレスとアドレスファミリーが異なっていても利用するように条件を緩和しています。
[Bug #8574] で報告のあった RubyInstaller の CI でのエラーの対応かと思いましたが、同じエラーが出ているようなので違うみたいですね。 http://ci.rubyinstaller.org/job/ruby-trunk-x64-test-all/1492/

mrkn:r41725 2013-07-01 20:46:15 +0900

拡張ライブラリ bigdecimal を gem パッケージとして 1.9.3 にインストールすると、未定義のマクロ RB_UNUSED_VAR() と UNREACHABLE が利用されていてコンパイルに失敗していたので、ext/bigdecimal/bigdecimal.h で未定義の時に代替定義するようにして gem パッケージバージョン 1.2.1 としてリリースしています。 [ruby-core:55730] [Bug #8588]
標準ライブラリに含んでいる gem パッケージは後方互換性も考慮しないといけないですね。

akr:r41726 2013-07-01 22:59:50 +0900

bignum.c の rb_cstr_to_inum() で非常に桁数の大きい文字列を Bignum 化するのが遅かったので、大きい桁数の時に Bignum の大きな整数の積を高速に計算するアルゴリズムを流用して計算する bary_mul2() という関数を追加してこれを利用するようにしています。

naruse:r41727 2013-07-01 23:12:10 +0900

template/encdb.h.tmpl で Encoding のインデックス番号を ENCIDX_XXX のようなマクロとして定義するようにしています。

naruse:r41728 2013-07-01 23:12:13 +0900

r41727 で導入した Encoding のインデックスのマクロ定数を利用して string.c で rb_enc_find() による検索を省くようにしていますが、ビルドに失敗していたようで r41729 で revert されています。

naruse:r41729 2013-07-01 23:30:04 +0900

41728 を revert しています。

nobu:r41730 2013-07-01 23:44:31 +0900

util.c の scan_digits() という関数の文字と数字の対応を持つ配列の宣言に const をつけています。