ruby-trunk-changes r58872 - r58887

今日は Dir.children と Dir.each_child という "." と ".." を含まないエントリを返すメソッドの追加やいくつかの最適化がありました。

nobu: r58872 2017-05-24 22:30:54 +0900

r58855 で例外発生時に nil に対して finish メソッドを呼んでしまう不具合を修正しています。

nobu: r58873 2017-05-24 23:26:09 +0900

struct dirent の d_name が NUL 文字終端しているとはかぎらず、サイズが d_namlen で渡されていることがあるので glob_helper で NUL 文字終端を前提としていた部分を NAMLEN() マクロを使って移植性のある実装にそろえています。

normal: r58874 2017-05-25 03:59:24 +0900

pthread 版の thread の実装で timer thread の起動時に EINVAL が発生した時に pthread_attr の指定なしの起動に fallback するようにしています。やむをえず stack size の指定をなしで起動するようです。

svn: r58875 2017-05-25 03:59:25 +0900

version.h の日付更新。

normal: r58876 2017-05-25 06:26:14 +0900

r58866 の変更で String#crypt でメモリ解放の条件がおかしくてメモリリークしていた不具合を修正しています。

nobu: r58877 2017-05-25 10:46:36 +0900

dir_entries() で to_a メソッドなどを呼んで配列に変換していたのを dir_each() から切り出した dir_each_entry() を呼ぶように最適化しています。

nobu: r58878 2017-05-25 11:50:20 +0900

Dir#entries のテストをしていたテストメソッドに Dir.entries のテストも追加しています。

nobu: r58879 2017-05-25 11:50:21 +0900

Dir.children と Dir.each_child というメソッドを新規追加しています。つまりこれは "." と ".." が現れない Dir.entries と Dir.each というわけですね。なるほどメソッドを別に追加することにしたのかー。 [ruby-dev:49135] [Feature #11302]

watson1978: r58880 2017-05-25 13:25:37 +0900

Array#index と Array#rindex で rb_equal_opt() が Qundef を返した時に rb_equal() に fallback していたのを rb_equal() の中に rb_equal_opt() の呼び出しを埋め込んでいます。これは Array#index, #rindex のほうが主眼じゃなくて、rb_equal() を最適化版を使うように高速化して、Array#index, #rindex のほうは同じ高速化のための分岐をしてたのが冗長になったので削ってるってことですね。 https://github.com/ruby/ruby/pull/1552 [ruby-core:80360] [Bug #13365]

watson1978: r58881 2017-05-25 13:25:39 +0900

rb_eql() も最適化版の rb_eql_opt() を導入して即値オブジェクトの比較でメソッド呼び出しを回避して高速にするようにしています。 https://github.com/ruby/ruby/pull/1589 [ruby-core:80761] [Bug #13447]

nobu: r58882 2017-05-25 14:29:35 +0900

r58881 で rb_eql_opt() で opt_eq_func() を呼んでいましたが eql? メソッド相当の関数を呼ぶため opt_eql_func() という関数を新設してこちらを呼ぶように修正しています。

nobu: r58883 2017-05-25 16:36:47 +0900

r58882 で BUILTIN_CLASS_P() と EQ_UNREDEFINED_P() というマクロを重複してい定義していたのをあとのを削っています。また使っていた関数の後で #undef しておくようにしています。

stomar: r58884 2017-05-25 16:50:20 +0900

r58879 で新規追加した Dir.children と Dir.each_child の rdoc 用コメントでメソッド名が typo というかコピー元の Dir.entries と Dir.foreach のままだったのを修正しています。

stomar: r58885 2017-05-25 17:34:13 +0900

Dir.glob の rdoc 用コメントに説明を追記、修正しています。 [ruby-core:78767] [Feature #13056]

k0kubun: r58886 2017-05-25 20:14:40 +0900

String#concat で引数が1つの時に rb_str_concat() を直接呼ぶショートカットを追加して余分な中間オブジェクトの生成を抑制する最適化。 https://github.com/ruby/ruby/pull/1631

k0kubun: r58887 2017-05-25 20:41:45 +0900

insns.def の tostring 命令のコメントを to_str の結果ではなく to_s の結果と修正しています。