ruby-trunk-changes r59689 - r59692

今日は Array#permutation や Array#combination でブロックを渡さなかった時に返す Enumerator の size メソッドの計算の最適化などがありました。

nobu: r59689 2017-08-30 14:36:59 +0900

array.c で Array#combination や Array#permutation などでブロックを渡さなかった時に返す Enumerator の size 用に内部的に呼ぶメソッドを rb_funcallv() でメソッド呼び出しを利用していたのを、直接 C 実装の関数を呼ぶように最適化しています。

svn: r59690 2017-08-30 14:37:00 +0900

version.h の日付更新。

nobu: r59691 2017-08-30 16:55:19 +0900

Array#permutation が返す Enumerator の size メソッド用の関数 descending_factorial() という関数で how_many が 1 の時の乗算を省略するようにする最適化。

nobu: r59692 2017-08-30 17:26:16 +0900

Array#combination, Array#repeated_combination が返す Enumerator の size メソッドで使う binomial_coefficient() でも、先に巨大な整数を作っておいてから除算するのでなく順次乗算と除算を繰り返すようにしてメモリ効率をよくしています。