ruby-trunk-changes r54925 - r54933

今日は主に random.c のリファクタリング潜在的メモリリーク修正などがありました。

nobu: r54925 2016-05-06 08:16:28 +0900

Enumerable#find, #detect の rdoc 用コメントにサンプルを追加しています。 https://github.com/ruby/ruby/pull/1340

nobu: r54926 2016-05-06 15:29:55 +0900

random.c の rand_init() で引数 vseed を整数に変換したオブジェクトを volatile 修飾子付きで宣言した変数に格納していたのですが(おそらく最適化による GC 避け)、この値は戻り値なので不要として変数を削除して引数をそのまま使うようにしています。

nobu: r54927 2016-05-06 15:29:56 +0900

random.c の Init_Random_default() で TypedData_Wrap_Struct() の前に seed の生成や rb_global_variable() への登録などしていたのですが TypedData_Wrap_Struct() はメモリ確保で例外になる可能性があるので先に TypedData_Wrap_Struct() しておくようにしています。また rb_global_variable() の登録は参照している Random のオブジェクトを rb_gc_register_mark_object() で登録するので不要として削除しています。

nobu: r54928 2016-05-06 15:52:35 +0900

random.c の共用体 sipseed の型に uint8_t[16] を使っていたのを sipseed_keys_t という型名に typedef しておいてpadding のためにサイズの調整をしていたところで type_roomof() マクロを使うようにしています。

nobu: r54929 2016-05-06 15:52:36 +0900

random.c の random_init()、rb_f_srand()、rb_f_rand() などでシンプルな省略可能引数の処理は rb_scan_args() を使うかわりに rb_check_arity() を使うようにリファクタリングしています。

nobu: r54930 2016-05-06 15:52:37 +0900

random.c で rb_check_to_integer() にメソッド名 "to_int" を渡して呼んでいたのを、同じ内容の shortcut 関数 rb_check_to_int() に置き換えています。

nobu: r54931 2016-05-06 16:18:33 +0900

random.c の rand_random() や rb_f_rand() で大きな分岐後に return するようになっていたのをそれぞれの分岐で return するようにしたり goto での移動を if の条件分岐に組みこんだりするリファクタリング

nobu: r54932 2016-05-06 16:18:34 +0900

r54912 で arc4random_buf() が使える時に Random.raw_seed の実装などに利用するようにする時に関数マクロ定義を使っていたのを static 関数として定義するようにしています。

kazu: r54933 2016-05-06 23:30:01 +0900

r51906 の時の ChangeLog エントリ(現在は doc/ChangeLog-2.3.0)の typo 修正。