ruby-trunk-changes r41962 - r41988

今日も bignum.c のリファクタリング、マルチバイトの NUL 終端文字対応の修正、Hash#each_pair と Struct#each_pair の最適化などがありました。

akr:r41962 2013-07-14 22:24:44 +0900

bignum.c の bary_subb() で yn が xn より大きいケースに対応して、呼び元の bigsub() で x と y の大小をチェックして必要に応じて反転していた処理をやめています。

akr:r41963 2013-07-14 23:28:33 +0900

configure で __builtin_popcountl(), __builtin_bswap32(), __builtin_bswap64() などの gcc の組み込み関数の存在チェックを行なって、gcc のバージョンで判定していた部分をこの判定結果を利用するように修正しています。

nobu:r41964 2013-07-15 02:21:32 +0900

マルチバイト NUL 文字終端の対応続き。 enc_set_index() に引数を追加してその中でエンコーディング変化に伴なう終端文字の伸長を行なうようにして漏れがないようにしています。

nobu:r41965 2013-07-15 02:21:36 +0900

Encoding#inspect でクラス名のエンコーディングを保持するため PRIsVALUE 指示子(%i)を利用するように書き換えています。

svn:r41966 2013-07-15 02:21:36 +0900

version.h の日付更新。

nobu:r41967 2013-07-15 02:21:41 +0900

同じくマルチバイト NUL 終端文字対応の続き。 エンコーディング変換時に新しいエンコーディングの文字幅変更の必要性の有無の判定に rb_enc_ascget() を使っていたところを使わないように書き換えています。 rb_enc_ascget() は変換前のエンコーディングに依存しているため不適当だったとのこと。 [ruby-core:55998] [Bug #8634]

nobu:r41968 2013-07-15 02:31:14 +0900

encoding.c で must_encoding() がエンコーディングの index ではなく rb_encoding * を返すように変更しています。その他 is_data_encoding() を利用するようにするリファクタリング

nobu:r41969 2013-07-15 02:32:07 +0900

Encoding#inspect で autoload 前は "(autoload)" という文字列を追加するようにしています。

nobu:r41970 2013-07-15 02:33:02 +0900

NO_PRESERVED_ENCODING というマクロでいくつか組み込みのエンコーディングを除外するのをもう不要として削除しています。

nobu:r41971 2013-07-15 02:40:32 +0900

r41967 の追加修正。 str_null_char() で1文字ずつカーソルを進める時に rb_enc_mbclen() で進める量を計算するようにしています。未初期化の変数を使ってインクリメントしてしまっていました。

nobu:r41972 2013-07-15 02:43:55 +0900

r41931 で signal.c に追加した valgrind のエラー抑制のための VALGRIND_MAKE_MEM_DEFINED() で未使用の値の警告抑制のため明示的な (void) へのキャストを追加しています。

nobu:r41973 2013-07-15 02:47:25 +0900

encoding.c から localeinit.c と miniinit.c という新規ソースファイルに初期化関数と rb_locale_charmap() を切り出しています。NO_LOCALE_CHARMAP というマクロを使って miniruby と通常の ruby で locale のエンコーディングの設定を換えるようにしていたのをファイル自体を分けるようにしているようです。

akr:r41974 2013-07-15 09:46:00 +0900

r41963 で追加した configure での __builtin_popcountl() のチェックを削除して、ceil_log2() およびそこから呼ばれている floor_log2(), next_pow2(), ones() などの関数を削除しています。ceil_log2() のかわりに bitsize() を使うようにしています。

nobu:r41975 2013-07-15 09:52:52 +0900

r41974 の ChangeLog エントリの typo 修正。

akr:r41976 2013-07-15 10:49:32 +0900

configure で組み込み関数 __builtin_clz(), __builtin_clzl(), __builtin_clzll() のチェックを追加して、bignum.c の nlz16(), nlz32(), nlz64(), nlz128() などの実装に利用するようにしています。

zzak:r41977 2013-07-15 10:56:52 +0900

Mutex#sleep の rdoc 用コメントに、スレッドが起床した時にロック再取得することを追記しています。 https://github.com/ruby/ruby/pull/342
ちなみにこのコミットログには [DOC] というタグが付いていますが、先日の irc 上での Developers Meeting でドキュメントのコミットを分離したいという議題でタグを付けて簡単に抽出できるようにしようということになったようです。 https://bugs.ruby-lang.org/projects/ruby/wiki/DevelopersMeeting20130712#Separating-documentation-only-commits

nobu:r41978 2013-07-15 11:11:15 +0900

bignum.c にコンパイラの警告除去のための明示的キャストの追加。 また BITSPERDIG が INT_MAX より小さいことをチェックするようにしています。

zzak:r41979 2013-07-15 11:13:13 +0900

Bignum#coerce の rdoc 用コメントを追加しています。 https://github.com/ruby/ruby/pull/360

akr:r41980 2013-07-15 11:26:24 +0900

bignum.c の #if SIZEOF_BDIGIT_DBL == 0 という不要な条件分岐を削除しています。

zzak:r41981 2013-07-15 11:33:58 +0900

Init_Numeric() の前にコメントを追加しています。 rdoc が Numeric クラスの overview として FloatDomainError のドキュメントを使ってしまっていたのでそれを打ち消すために簡単なコメントを追加しているそうです。

yugui:r41982 2013-07-15 13:21:34 +0900

標準添付ライブラリ prime.rb の Prime::EratosthenesSieve の実装をより高速な実装に置き換えています。 https://github.com/ruby/ruby/pull/347

glass:r41983 2013-07-15 13:26:58 +0900

rb_block_arity() という現在のメソッドに渡されているブロックのブロックパラメータの arity を返す API を internal.h に追加しています。ブロックが渡されていないメソッド内で呼ばれると SEGV しそうな気がしますけど、一応 Qnil を返すか例外にしたほうがいいんじゃないかと思います。

glass:r41984 2013-07-15 13:38:50 +0900

r41983 で追加した rb_block_arity() を利用して Hash#each_pair でブロックパラメータが 2 つ以上あったら rb_assoc_new() を作らないようにする最適化を行なっています。

akr:r41985 2013-07-15 13:50:49 +0900

bignum.c に STATIC_ASSERT() でコンパイル時のチェックに SIZEOF_BDIGIT_DBL、SIZEOF_BDIGITS や BDIGIT などの符号ありなしのチェックを追加しています。

glass:r41986 2013-07-15 14:20:11 +0900

r41984 の Hash#each_pair と同様に Struct#each_pair でも rb_block_arity() を使ってブロックパラメータが2以上あったら rb_yield_values() を使うことで rb_assoc_new() で一時データの配列を作らなくてすむようにしています。

akr:r41987 2013-07-15 14:42:22 +0900

bignum.c の rb_big2str0() を rb_big2str1() と改名して static 関数に変更したうえで rb_big2str0() は rb_big2str1() を呼び出すラッパ関数にして、さらに deprecated にしています。 trim = 0 での文字列化はサポートされなくなるみたいです。 ruby 本体でも現在 trim = 1 での呼び出ししかないっていうか1箇所からしか呼ばれていませんね。

akr:r41988 2013-07-15 21:56:29 +0900

bignum.c の余分な空白文字が入っていた部分の修正。