ruby-trunk-changes r60318 - r60359

今日も openssl の更新、Dir.glob の最適化のリベンジ、IO#write の複数の文字列を引数に受け付ける拡張など比較的多くの変更がありました。

rhe: r60318 2017-10-22 05:26:26 +0900

拡張ライブラリ openssl に upstream からマージしています。 OpenSSL::SSL::SSLContext#session_remove_cb= を利用するテストを skip するようにしています。コールバックは OpenSSL のライブラリから呼ばれるのですが、thread safe ではなくデッドロックを起こすことがあるため。

akr: r60319 2017-10-22 08:19:47 +0900

拡張ライブラリ socket で TCPSocket.gethostbyname も r60266 の Socket.gethostbyname と同様に deprecate として rdoc 用コメントに追記しています。

nobu: r60320 2017-10-22 08:21:05 +0900

文字列リテラル内の #{} での式展開の最適化。展開後の文字列が大きくなりそうな時はあらかじめ大きな capacity で String オブジェクトを生成しておくようにして不要な resize を抑えるようにしています。 https://github.com/ruby/ruby/pull/1626

akr: r60321 2017-10-22 08:23:05 +0900

Socket.getaddinfo の rdoc 用コメントに代替として Addrinfo.getaddrinfo の参照を追記しています。

nobu: r60322 2017-10-22 08:30:39 +0900

iseq_peephole_optimize() に VM 命令列の最適化で同じ setlocal が連続している時や getlocal で取得してそれを同じ変数に setlocal で書き戻しているような時に余分な命令を削るような最適化を追加しています。

sonots: r60323 2017-10-22 08:32:57 +0900

test/ruby/test_transcode.rb のコメントの typo 修正。 https://github.com/ruby/ruby/pull/1681

sonots: r60324 2017-10-22 08:35:40 +0900

String#gsub の rdoc 用コメントの英文法修正。 https://github.com/ruby/ruby/pull/1679

sonots: r60325 2017-10-22 08:36:53 +0900

doc/regexp.rdoc のサンプルコードで結果を表示する #=> のコメントアウトが不十分だったところを修正。 https://github.com/ruby/ruby/pull/1678

sonots: r60326 2017-10-22 08:38:17 +0900

doc/regexp.rdoc のバックスラッシュについての扱いの例を追加しています。 https://github.com/ruby/ruby/pull/1677

sonots: r60327 2017-10-22 08:44:15 +0900

Kernel#Array() メソッドの rdoc 用コメントにサンプルを追加して to_ary で変換できないオブジェクトの引数に対して取る挙動について追記しています。 https://github.com/ruby/ruby/pull/1663

sonots: r60328 2017-10-22 08:49:35 +0900

String#<< と String#concat の rdoc 用コメントを分離して String#concat には複数の引数が渡せるのでその差異を明確にしています。 https://github.com/ruby/ruby/pull/1614

svn: r60329 2017-10-22 08:49:36 +0900

r60328 の行末の空白除去。

suke: r60330 2017-10-22 08:57:10 +0900

拡張ライブラリ win32ole の ole_invoke() で NoMethodError 例外を発生させていたのを、その場で発生させずに rb_eNoMethodError を return して、呼び元で rb_call_super() することで通常の例外発生のメカニズムを使うようにしています。テストをみると例外オブジェクトの receiver をセットさせるためみたいです。

nobu: r60331 2017-10-22 09:00:41 +0900

string.c のコメントの空白や空行除去。

yui-knk: r60332 2017-10-22 09:17:39 +0900

T_NODE 型のオブジェクトから NODE_TO_ARY というタイプの NODE が未使用になっていたので削除しています。

nobu: r60333 2017-10-22 09:19:12 +0900

Array#[] で引数の数によって rb_ary_aref2() と rb_ary_aref1() と関数を分離して、VM の最適化命令 opt_aref から直接 rb_ary_aref1() を呼び出すようにして引数が Fixnum 以外の時もメソッド呼び出しを省略する最適化するようにしています。

yui-knk: r60334 2017-10-22 09:29:40 +0900

T_NODE 型オブジェクトから NODE_BLOCK_ARG という NODE も削除しています。ずいぶん前から未使用だったようです。

glass: r60335 2017-10-22 09:38:05 +0900

Hash#flatten の引数の数のチェックを追加して 2つ以上指定された時にちゃんと ArgumentError を発生させるようにしています。

yui-knk: r60336 2017-10-22 09:45:05 +0900

T_NODE 型オブジェクトから NODE_BMETHOD という NODE も未使用ということで削除しています。これももう未使用なのかー。

glass: r60337 2017-10-22 09:57:46 +0900

Hash#compare_by_identity でキーを同一性でチェックするようにモードをセットする時に rb_init_identtable_with_size() で st_table を新たにサイズ指定で作成しておいてそっちに挿入後に RHASH(hash)->ntbl を差し替えるように最適化しています。これ rehash するより速いのかな?

nobu: r60338 2017-10-22 10:13:57 +0900

r60224 の正規表現リテラルの once オプションの処理の parse.y への移動を再修正。nd_once_body() の呼び出しを1箇所にまとめるようにしているのかな?

nobu: r60339 2017-10-22 10:37:36 +0900

Ruby の未使用のローカル変数の警告を抑制するために、parse.y で mark_lvar_used() という関数を導入してローカル変数の ID にフラグセットしておくようにしています。trunk で a = a = 1 のような余分な代入文で未使用なローカル変数の警告が抑制できなくなっていたのを修正するものみたいです。 r60322 の余分なローカル変数への代入の VM 命令が最適化で消されるようになったのも何か関係あるのかなぁ。 [ruby-core:82656] [Bug #13872]

nobu: r60340 2017-10-22 10:46:43 +0900

r60322 の余分な setlocal 命令などの除去を行う最適化で a = a = 1 のような自己代入の時の dup 命令も削除するようにしています。

naruse: r60341 2017-10-22 11:03:49 +0900

r60253 の Dir.glob の FNM_EXTGLOB 対応の最適化のリベンジ。NEWS ファイルに Dir.glob の順序が変化することがあることについて追記しています。 [ruby-core:82660] [Feature #13873]

naruse: r60342 2017-10-22 11:08:46 +0900

r60341 の Dir.glob の最適化にあわせて Dir.glob のテストで結果を sort して比較するように修正しています。

glass: r60343 2017-10-22 11:11:07 +0900

IO#white に複数の文字列を受け取って、可能なら writev(2) システムコールを利用して一度に書き出すようにしています。しかしどうやら writev(2) のない環境ではビルドエラーになってるみたいです。 [ruby-core:59408] [Feature #9323]

naruse: r60344 2017-10-22 11:19:52 +0900

r60342 と同様に Dir.glob の結果の順序に依存しないようにテストを書き直しています。

nobu: r60345 2017-10-22 13:06:23 +0900

r60341 のインデントとスタイルの修正。

rhe: r60346 2017-10-22 13:19:03 +0900

doct/syntax/methods.rdoc の r60341 で追記した代入記号つきメソッドの呼び出しで評価値が常に右辺値になる記述のサンプルで receiver つきにしてメソッド呼び出しになるようにしています。 https://github.com/ruby/ruby/pull/1725

nobu: r60347 2017-10-22 14:13:57 +0900

T_NODE 型オブジェクトの NODE_DREGX_ONCE という NODE を削除しています。未使用になったからとのこと。

nobu: r60348 2017-10-22 14:36:49 +0900

拡張ライブラリ objspace の ObjectSpace.count_nodes で最近追加された NODE のタイプの集計が含まれてなかったので追加しています。

nobu: r60349 2017-10-22 15:01:07 +0900

拡張ライブラリ socket の BasicSocket#recv_nonblock の rdoc 用コメントで第3引数 buf の記述が抜けてたのを修正しています。

yui-knk: r60350 2017-10-22 15:11:01 +0900

parse.y のインデント修正のみ。

nobu: r60351 2017-10-22 15:22:50 +0900

r60343 で追加した io_writev() で writev(2) が使えない環境でのローカル変数の重複や宣言漏れを修正しています。 [ruby-core:59408] [Feature #9323]

kazu: r60352 2017-10-22 15:30:47 +0900

io_writev() のインデントとコメントの typo 修正。

kazu: r60353 2017-10-22 16:01:57 +0900

Hash#slice の rdoc 用コメントに引数の記述とサンプルコードを追加しています。

yui-knk: r60354 2017-10-22 16:04:00 +0900

String#delete で coderange の設定が正常にされることをチェックしているテストで String#tr を使っていた assertion があったので String#delete に変更しています。たぶん同様の String#tr についてのテストは r60060 で追加されているので大丈夫、ということではないかと。

rhe: r60355 2017-10-22 16:18:54 +0900

拡張ライブラリ dbm, gdbm, sdbm でメモリリークしていたのを修正しています。

rhe: r60356 2017-10-22 16:18:55 +0900

拡張ライブラリ dbm, gdbm, sdbm の free 関数や memsize 関数で NULL が渡されることはないので、不要な判定を削除しています。

kazu: r60357 2017-10-22 18:16:51 +0900

拡張ライブラリ psych のコメントの typo 修正。

kazu: r60358 2017-10-22 18:16:54 +0900

SecureRandom.alphanumeric のテストで正規表現に ^$ を使っていたところを \A\z に変更しています。

hsbt: r60359 2017-10-22 20:27:06 +0900

標準添付ライブラリやテストの主にコメントやメッセージの typo 修正。 https://github.com/client9/misspell っていうツールを使ってよくある typo を検出したみたいです。