ruby-trunk-changes r54565 - r54580

今日は Array#sum の追加という新機能追加がありました。

akr: r54565 2016-04-13 22:51:53 +0900

Array#sum が追加されています。 また Array#inject に :+ が渡された時に Float の加算を最適化していた処理はやめています。 どうもこれまでより精度が良くなるので挙動が変わってしまうという指摘があったみたいで、そっちはやめて Array#sum ではこの Kahan のアルゴリズムを用いて精度のよい加算ができるようにしているようです。新規追加のメソッドなのでこちらは互換性を気にする必要はないですからね。 [ruby-core:74569] [Feature #12217]

akr: r54566 2016-04-13 23:40:20 +0900

r54565 の ChangeLog エントリのチケット参照にスペースを追加。 [ruby-core:74569] [Feature #12217]

akr: r54567 2016-04-13 23:55:18 +0900

r54565 の Array#sum の追加を NEWS ファイルに追記しています。 [ruby-core:74569] [Feature #12217]

akr: r54568 2016-04-14 09:00:32 +0900

r54565 の Array#sum の rdoc 用コメントのサンプルコードのインデント修正と、エラーになるケースについて追加しています。 [ruby-core:74569] [Feature #12217]

svn: r54569 2016-04-14 09:00:33 +0900

version.h の日付更新。

nobu: r54570 2016-04-14 10:25:33 +0900

configure.in のインデントのタブ化。

nobu: r54571 2016-04-14 10:25:34 +0900

configure で cygwin 用に CPPFLAGS に -D_XOPEN_SOURCE -D_GNU_SOURCE オプションを追加しています。 eaccess(3) のためとのこと。

nobu: r54572 2016-04-14 10:30:12 +0900

make runruby 用の ruby-runner.c を自動生成していたのを、ruby-runner.c はリポジトリにコミットして ruby-runner.h というヘッダファイルをテンプレートから自動生成するように変更しています。 BUILDDIR、LIBPATHENV、PATH_SEP などの変動する部分だけをヘッダに切り出して置換するようにしています。

nobu: r54573 2016-04-14 13:41:47 +0900

process.c でいくつか省略可能引数があるだけのシンプルな引数処理を rb_scan_args() を呼ぶかわりに rb_check_arity() と argc による分岐に書きかえています。最近この手の書きかえがよくありますけどこのほうが高速なんですかね。

nobu: r54574 2016-04-14 14:28:58 +0900

cont.c で Windows 環境向けに CreateFiber() を利用している箇所で _MSC_VER をチェックしているところで誤って16進数でバージョンを書いていたのを10進数に修正しています。 [ruby-core:74936] [Bug #12279]

nobu: r54575 2016-04-14 14:58:16 +0900

拡張ライブラリ tk で r53077 で tk_hash_kv() の引数チェックを追加しましたが nil の場合もありえるので修正しています。

naruse: r54576 2016-04-14 19:06:41 +0900

標準添付ライブラリの irb の拡張用のクラス IRB::Context#save_history= の定義前にメソッド再定義の警告除去のため remove_method の呼び出しを追加しています。

akr: r54577 2016-04-14 21:48:44 +0900

Array#sum の rdoc 用コメントに省略可能な初期値の引数(デフォルトは 0)を追加しています。さらにブロックも受け付けるようになって、ブロックが渡された場合は各要素をパラメータとしてブロックを呼び出した結果を加算するようにしています。だんだんすごいメソッドになってきたぞ…。つまり 1から5までの整数の二乗和というと (1..5).to_a.sum{|x| x*x } でできるわけですね。これはなかなか便利そう。 a と b をベクトルとして誤差二乗和が a.zip(b).to_a.sum{|i,j| (i-j)**2 } と書けますね。Enumerable#sum があれば to_a を省けますが…。

akr: r54578 2016-04-14 21:56:38 +0900

Array#sum の rdoc 用コメントに算術平均の求めかたを追記しています。なるほど引数に 0.0 を入れておくと結果を to_f しなくても Float になるのか。

akr: r54579 2016-04-14 21:57:07 +0900

Array#sum のテストに Array の要素に Object を入れておいたら TypeError が発生するというテストケースを追加しています。

kazu: r54580 2016-04-14 22:40:30 +0900

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