ruby-trunk-changes r42257 - r42294

今日は RubyGems の更新、bignum.c のリファクタリング、String#rindex の最適化、URI.decode_www_form_component の不具合修正、Refinements の警告の削除などなどいろいろありました。

drbrain:r42257 2013-07-31 07:10:21 +0900

RubyGems の master から最新版をマージしています。 outdated サブコマンドのリファクタリング、拡張ライブラリのビルド回りのコードを Gem::Installer から Gem::Ext::Builder へ移動、証明書の出力時の暗号化アルゴリズムの変更などです。

svn:r42258 2013-07-31 07:10:29 +0900

version.h の日付更新。

nobu:r42259 2013-07-31 07:11:11 +0900

lib/rubygems/remote_fetcher.rb の行末の空白を除去。

zzak:r42260 2013-07-31 12:03:14 +0900

lib/rubygems.rb のコメントで記載されているドキュメントの URL を修正しています。 https://github.com/ruby/ruby/pull/369

zzak:r42261 2013-07-31 12:06:23 +0900

r42260 の ChangeLog エントリに Github の pull request への URL を追記しています。

akr:r42262 2013-07-31 12:20:35 +0900

bignum.c で Bignum を文字列化するための処理に使う変数などをまとめた struct big2str_struct という構造体を導入して big2str_orig(), big2str_karatsuba() の引数の一部をこの構造体で置き換えています。

knu:r42263 2013-07-31 14:58:09 +0900

標準添付ライブラリ set の rdoc コメントに Set は順序を保存しないので、順序を保持したい場合は SortSet を使うように、と書いている部分で "ordered" という単語のかわりに "sorted" という単語を使うようにしています。辞書を引いてみても微妙なニュアンスの違いって感じですね。挿入順序というのではなくてあるルールに基づいて並べるよ、ということを強調したという感じでしょうか。

knu:r42264 2013-07-31 14:58:14 +0900

標準添付ライブラリ set.rb の rdoc コメントのサンプルコードで Set#merge 結果の表示順序を修正しています。

knu:r42265 2013-07-31 14:58:17 +0900

標準添付ライブラリ set.rb の rdoc 用コメントに、Set が要素を保存するのに Hash を使っていることによる注意事項としてキーを破壊的に変更すると取り出せなくなることや、キーに String を使うときは自動的に freeze したコピーが使われることなどを追記しています。 [ruby-core:45642] [Feature #6589]

knu:r42266 2013-07-31 15:02:07 +0900

r42265 の ChangeLog エントリにチケット番号の参照を追記しています。

naruse:r42267 2013-07-31 16:07:03 +0900

r42249 あたりでテストが NoMemoryError で終了した時にデバッグ情報を出力するようにした変更の追加で、ObjectSpace.count_objects_size を出力するのをやめて /proc/meminfo の内容を出力するようにしています。 最近テストで NoMemoryError がよく起きるということでその追跡中とのこと。 [ruby-dev:47559] [Bug #8711]

glass:r42268 2013-07-31 16:53:08 +0900

string.c の rb_str_rindex() の関数呼び出しを必要になるまで遅延したり、文字列の長さを得る時に singlebyte の時の最適化を利用するようにしたり、マッチした位置が 0 だった時の最適化などを行なっています。

glass:r42269 2013-07-31 17:47:13 +0900

rb_str_rindex() で memrchr(3) が利用可能な時にはこれを使ってより効率的な実装をするようにしています。 UTF-8 だとひらがなが先頭だと1文字ずつマッチしそうですね。漢字だと割と全てのバイトが変化しそうですけど。

naruse:r42270 2013-07-31 17:59:25 +0900

テストの NoMemoryError 追跡として Fiber でマシンスタックを mmap(2) で確保する時にエラーが発生した場合の例外に errno を含めるようにしています。 [ruby-dev:47559] [Bug #8711]

sorah:r42271 2013-07-31 18:00:18 +0900

標準添付ライブラリ uriURI.decode_www_form_component で文字列にマルチバイト文字が含まれていた時に正規表現を使った String#gsub でエラーが発生しないように事前に force_encoding で ASCII-8BIT に変換してから置換するようにしています。

shugo:r42272 2013-07-31 18:29:40 +0900

"Module#refine is no longer experimental." とのことで、refine や using を使った時の "Refinements are experimental" という警告メッセージの出力を消しています。 [ruby-core:55993] [Feature #8632]

knu:r42273 2013-07-31 18:34:34 +0900

r42271 の dup + force_encoding("ASCII-8BIT") のかわりに String#b を利用するようにしています。

akr:r42274 2013-07-31 19:58:58 +0900

bignum.c で MAX_BIG2STR_TABLE_ENTRIES という定数に 64 という固定の値を使っていたのを size_t のサイズに依存してそのビット数を使うようにしています。そして累乗の計算で power_cache_get_power0() でこのサイズを超えるビット数が渡されないことをチェック(超えたら rb_bug() で落とす)するようにしています。

glass:r42275 2013-07-31 20:18:18 +0900

r42269 で String#rindex に memrchr(3) を使った実装で対象が空文字列だった時の挙動に不具合があったので修正しています。

kou:r42276 2013-07-31 21:20:50 +0900

test/rexml/test_notationdecl_parsetest.rb から shebang(ファイル先頭の #! から始まるスクリプトのパス指定)を削除しています。

kou:r42277 2013-07-31 21:25:36 +0900

test/rexml/ の下のさらにいくつかのテストスクリプトからも shebang を削除。

kou:r42278 2013-07-31 21:32:24 +0900

test/rexml/test_notationdecl_parsetest.rb に1つしかテストメソッドがないので setup メソッドをテストメソッド内に埋め込んでいます。なんか別にそれは前準備なら分けててもいい気はしますけどね。

kou:r42279 2013-07-31 21:38:41 +0900

rexml のテスト TestNotationDeclMixin から test_name というテストメソッドを TestNotationDecl に移動しています。

kou:r42280 2013-07-31 21:44:24 +0900

test/rexml/test_notationdecl_parsetest.rb の TestNotationDecl のテストメソッド 2つをそれぞれサブクラスのテストメソッドに分けています。

kou:r42281 2013-07-31 21:59:28 +0900

test/rexml/test_notationdecl_parsetest.rb でもテストメソッドをサブクラス内に入れて、またメソッドを assetion 毎に分割しています。ここでサブクラスを2つネストさせているのは何か意味があるんでしょうか。

kazu:r42282 2013-07-31 22:01:57 +0900

bison-3.0 で parse.y がビルドできないのを解決しているそうです。 YYPURE が偽の時の yylex() のプロトタイプ宣言と YYLEX_PARAM のかわりに %lex_param で lexer へのパラメータを指定するようにしているようです。また %pure_parser とアンダースコアで区切られてたのを %pure-parser と変更しています。検索してみると古いマニュアルにはアンダースコアのほうが書かれているので変わったんですかね。

kou:r42283 2013-07-31 22:04:10 +0900

r42281 で分割したメソッドに類似のテストケースを別のサブクラスを追加してその中に定義しています。なるほどこのためにサブクラスをネストしてたんですね。

kou:r42284 2013-07-31 22:05:02 +0900

r42281 および r42283 で変更していたテストクラスの名称を修正しています。

akr:r42285 2013-07-31 22:42:22 +0900

rb_big_cmp() から BGIDIT の配列の表現で処理する部分を bary_cmp() として分離して big2str_karatsuba() から利用するようにしています。こっちの bit2str の変更はよくわからず。

kou:r42286 2013-07-31 22:52:06 +0900

r42283 の続きで test/rexml/test_notationdecl_parsetest.rb に類似のテストクラスをサブクラスとして追加しています。

kou:r42287 2013-07-31 22:53:35 +0900

r42286 で追加したテストの typo 修正。

kou:r42288 2013-07-31 22:55:12 +0900

test/rexml/test_notationdecl_mixin.rb を削除しています。重複したテストだったとのこと。

kou:r42289 2013-07-31 22:58:49 +0900

test/rexml/test_notationdecl_parsetest.rb を test/rexml/parse/test_notation_declaration.rb に移動しています。

kou:r42290 2013-07-31 23:00:26 +0900

r42289 で移動した test/rexml/parse/test_notation_declaration.rb のテストクラス名をファイルパスに応じて変更しています。

akr:r42291 2013-07-31 23:21:54 +0900

bignum.c の power_cache_get_power() と big2str_orig(), big2str_karatsuba() の引数 len や numdigits_ret の型を long -> size_t に変更しています。おそらく利用しているテーブルのサイズ的に size_t のほうが正しいということかと思われます。

naruse:r42292 2013-08-01 00:01:39 +0900

r42249 でテストが例外で終了した時の Object.count_objects を出力するようにしたのを revert しています。 といっても "/proc/meminfo" の出力は残っています。 [ruby-dev:47559] [Bug #8711]
ChangeLog には r42255 を revert と書かれていますが、これは rescue を NoMemoryError に限定する変更なので多分 r42249 のことだろうと思います。

svn:r42293 2013-08-01 00:01:43 +0900

version.h の日付更新。

akr:r42294 2013-08-01 00:01:55 +0900

bignum.c の big2str_find_n1() big2str_orig() big2str_karatsuba() の返り値の型を long から size_t に変更しています。 r42291 の続きでしょうか。