ruby-trunk-changes r54581 - r54605

今日は主に Array#sum の追加実装や拡張ライブラリ io/console の不具合修正、Thread#name= の不具合修正などがありました。

akr: r54581 2016-04-15 01:19:33 +0900

Array#sum のテストに初期値や要素に Float を含む時のテストケースを追加しています。

svn: r54582 2016-04-15 01:19:34 +0900

version.h の日付更新。

nobu: r54583 2016-04-15 06:41:08 +0900

r54574 の ChangeLog エントリが2重になっていたのを削っています。

nobu: r54584 2016-04-15 09:02:41 +0900

拡張ライブラリ io/console の Windows 版の IO#pressed? の実装で引数が Symbol で渡された場合に NUL 文字を含む可能性があるのでその場合も文字列に変換後 StringValueCStr() を通して使うようにしています。

nobu: r54585 2016-04-15 09:02:42 +0900

拡張ライブラリ io/console は gem としても配布されているので、古い Ruby でビルドされた場合に RARRAY_CONST_PTR() がない可能性があるので代替定義するようにしています。

nobu: r54586 2016-04-15 09:02:43 +0900

拡張ライブラリ io/console で rb_funcall2() のかわりに rb_funcallv() という関数名を使うようにして、未定義の場合には rb_funcall2 に fallback するようにしています。

nobu: r54587 2016-04-15 09:02:59 +0900

拡張ライブラリ io/console で rb_sym2str() が存在しない時に rb_id2str() で代替するようにしています。 [ruby-core:74953] [Bug #12284]

nobu: r54588 2016-04-15 10:06:49 +0900

拡張ライブラリ io/console のテストで IO.console メソッドの定義の有無で分岐しているのを後置 if でしていたのを、前に条件をもってきて and で連結する記法に変更しています。

nobu: r54589 2016-04-15 10:07:14 +0900

拡張ライブラリ io/console の Windows 版限定機能の IO.pressed? でキー名に NUL 文字を含む文字列が渡された時に StringValueCStr() のチェックで弾いていたのを、キー名がみつからない時の ArgumentError 例外にまかせるようにしています。

nobu: r54590 2016-04-15 10:17:51 +0900

r54562, r54563, r54564 の Integer#ceil, #floor と Float#ceil, #float の省略可能引数の追加について NEWS ファイルに追記しています。 [ruby-core:74788] [Feature #12245]

mrkn: r54591 2016-04-15 14:16:04 +0900

Array の同値性チェックのテストに、要素に Rational が含まれていた時のテストケースを追加しています。

nobu: r54593 2016-04-15 15:15:54 +0900

拡張ライブラリ io/console の gemspec のバージョンを 0.4.5 から 0.4.6 に上げています。

naruse: r54594 2016-04-15 15:39:49 +0900

make benchmark, make benchmark-each, make tbench などのベンチマーク実行用のターゲットで -I オプションや --disable-gems オプションの指定を追加しています。

hsbt: r54596 2016-04-15 20:27:38 +0900

標準添付ライブラリ irb の r54576 で save_history= メソッドの再定義の警告除去のため remove_method していたところで、まだメソッドが定義されていない場合に NoMethodError が発生するのを修正しています。

nobu: r54598 2016-04-15 21:12:25 +0900

Thread#name= が initialize が完了する前に呼ばれると SEGV する不具合を修正しています。 このため GetThreadPtr() を初期化済みかどうかのチェックつきの get_initialized_threadptr() という wrapper 関数を定義してこれを使うようにしています。 [ruby-core:74963] [Bug #12290]

nobu: r54599 2016-04-15 21:13:35 +0900

拡張ライブラリ io/console の Windows 向けのテスト用拡張ライブラリのリファクタリング。 IO オブジェクトから HANDLE 構造体を得る処理を関数に切り出しています。

nobu: r54600 2016-04-15 22:30:03 +0900

r54598 の追加修正。 Thread が initialize で初期化完了していなかったら Thread#name= で ThreadError 例外を発生させるようにしていましたが、エラーにはせず実際に native thread を起動時に名前をセットするように遅延させるようにしています。 [ruby-core:74963] [Bug #12290]

mrkn: r54601 2016-04-15 22:33:05 +0900

Array#sum の実装で Rational と Float が要素に含まれていた時に誤差を軽減するアルゴリズムが有効になるようにしています。
今気がついたんですけどブロック付きで呼ばれた時に、要素に Integer 以外が含まれてて goto 文でジャンプした時に同じ要素について2回ブロックが呼び出されますね。

mrkn: r54602 2016-04-15 23:46:35 +0900

Array#sum で要素が Integer と Rational だけだった時に Rational の加算を直接 rb_rational_add() を呼ぶようにする最適化も行なうようにしています。Rational の加算は nurat_add() という関数名だったのを rb_rational_add() に改名して static もはずしています。

mrkn: r54603 2016-04-15 23:54:39 +0900

r54602 の続き。さらに rb_rational_add() -> rb_rational_plus() と関数名を改名しています。 Fixnum 用の rb_fix_plus() にあわせたみたいです。

akr: r54604 2016-04-16 00:26:48 +0900

NEWS の Compatibility issues のセクションに Array#sum の追加により ActiveSupport などもともと Enumerable#sum メソッドなどを提供していたライブラリを使っていたら若干挙動が異なることで非互換になる可能性があることについて追記しています。

svn: r54605 2016-04-16 00:26:49 +0900

version.h の日付更新。