Hatena::ブログ(Diary)

PB memo このページをアンテナに追加 RSSフィード

2017-10-22 ruby-trunk-changes r60318 - r60359

[][]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 つきにしてメソッド呼び出しであることを明示するようにしています。

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#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 を検出したみたいです。

2017-10-21 ruby-trunk-changes r60220 - r60317

[][]ruby-trunk-changes r60220 - r60317

今日は Ruby 開発者合宿があったので、とてもたくさんの変更がありました。不具合修正に新規メソッドの追加と冒頭では書ききれないほどあるので、どこかで 2.5 の新機能として紹介されるのをご期待ください。

ちなみに今日は svn さんのコミットも含めて 98個もあり、ruby-trunk-changes 開始から最多を記録しました。

yui-knk: r60220 2017-10-21 01:22:22 +0900

branch coverage で分岐の位置を指定するなどに使うためと思われますが、parse した時にその token のカラム番号を NODE に保持するようにしています。大作ですね。

svn: r60221 2017-10-21 01:22:24 +0900

version.h の日付更新。

svn: r60222 2017-10-21 01:22:24 +0900

r60220 の行末の空白のみ。

yui-knk: r60223 2017-10-21 09:14:32 +0900

r60220 で cdecl という変数を使ったら Windows では(というか VC では?) cdecl は予約語? で変数名には使えないようなので nd_cdecl と改名しています。

nobu: r60224 2017-10-21 10:06:25 +0900

正規表現リテラルの once オプションつきのものをコンパイルする時に compile.c で NEW_NODE() を呼び出して NODE を確保していたのを parse.y でやっておくようにしています。

yui-knk: r60225 2017-10-21 11:50:38 +0900

parse_numeric() で浮動小数点数リテラルを読んだ後に literal_flush() という関数を呼んでいたのをやめています。 Float のリテラルや Complex のリテラル浮動小数点数リテラル部分を示すカラム位置が正確になるようにしているそうです。

nobu: r60226 2017-10-21 12:18:46 +0900

r60225 の修正に対するテストを追加しています。

knu: r60227 2017-10-21 14:18:38 +0900

拡張ライブラリ pty の IO#expect の実装で不要な String#chr があったのを削っています。

knu: r60228 2017-10-21 14:18:40 +0900

同じく拡張ライブラリ pty の IO#expect で MatchData#to_a を使っていたところを MatchData#captures を利用するようにリファクタリングしています。

glass: r60229 2017-10-21 15:08:33 +0900

Hash#slice メソッドを新規追加しています。可変長の引数を指定して、その引数をキーとしてもつサブセットの Hash オブジェクトを返すメソッドです。 ActiveSupport にはあったそうで、そうなのか…。 [ruby-core:55330] [Feature #8499]

glass: r60230 2017-10-21 15:11:01 +0900

r60229 の Hash#slice の追加について NEWS ファイルに追記しています。

k0kubun: r60231 2017-10-21 15:22:43 +0900

ruby_current_thread, ruby_current_vm, ruby_vm_event_flags, ruby_vm_const_missing_count などの VM 関係の変数を export するようにしています。JIT コンパイラを作りやすくするためみたいです。

akr: r60232 2017-10-21 15:22:53 +0900

標準添付ライブラリ open-uriオプションに :encoding を受け付けられるようにしています。

akr: r60233 2017-10-21 15:45:41 +0900

IO.copy_stream の rdoc 用コメントに引数として IO のオブジェクトを受け付けるという記述を、src は read または readpartial を、dst は write メソッドを呼び出せるオブジェクトである必要があるというふうに修正しています。

naruse: r60234 2017-10-21 15:51:01 +0900

String#start_with? が引数文字列だけでなく正規表現も受け付けるようにしています。これは便利そう。 [ruby-core:81897] [Feature #13712]

というかこの変更とは関係ないけどこれで実装読んで知ったんですが、String#start_with? って複数の引数を受け取って、どれかが先頭にマッチしたら true を返すっていうことができたんですね…。

k0kubun: r60235 2017-10-21 15:57:04 +0900

r60231 のさらに続きで ruby_vm_global_method_state, ruby_vm_global_constant_state, ruby_vm_class_serial といったキャッシュ関係の変数も static を消して export するようにしています。

akr: r60236 2017-10-21 16:00:58 +0900

標準添付ライブラリ open3 の各種メソッドで stdin_data 引数文字列でなく readpartial メソッドを呼び出せる IO のようなオブジェクトが渡された時に IO.copy_stream を使って対応するようにしています。 [ruby-core:80936] [Feature #13527]

usa: r60237 2017-10-21 16:44:11 +0900

r60218 で追加された FileUtils.cp_r のテストを symbolic link が有効な環境でのみ実施するようにしています。

akr: r60238 2017-10-21 17:34:49 +0900

拡張ライブラリ pathname に Pathname#glob メソッドを新規追加しています。 receiver の Pathname オブジェクトのパスを基準として、そこからの相対パスDir.glob を行うようなメソッド(当然戻り値も Pathname オブジェクトになる)です。 [ruby-core:49373] [Feature #7360]

mame: r60239 2017-10-21 17:40:28 +0900

NODE オブジェクトの NODE_ALLOCA というタイプを T_IMEMO 型オブジェクトのサブタイプの imemo_alloc というのに置き換えています。これは確か一時利用のバッファGC 対象にするために導入されたものですね。

usa: r60240 2017-10-21 17:41:22 +0900

Windows 版で時刻を取得する時に可能なら GetSystemTimeAsFileTime() のかわりに GetSystemTimePreciseAsFileTime() という関数を使うようにしています。こちらのほうがより精度のよい時刻を取得できるようです。 [ruby-dev:50167] [Feature #13732]

akr: r60241 2017-10-21 17:41:59 +0900

拡張ライブラリ pathname の idXxxx 系の変数宣言をまとめて書いていたのを 1つずつ1行の宣言になるように変形しています。

akr: r60242 2017-10-21 17:44:56 +0900

NEWS ファイルに RbConfig::LIMITS の参照に require "rbconfig/sizeof" が必要なことを追記しています。

nobu: r60243 2017-10-21 17:56:58 +0900

tool/vcs.rb で git で revision 番号を取得するのに git log を使う前に git describe を使ってタグから計算する手法を使うようにしているようです。タグ指定でチェックアウトされている時には使えるっぽい?

nobu: r60244 2017-10-21 18:10:42 +0900

r60239 の NODE_ALLOCA の T_IMEMO 型オブジェクトの imemo_alloc タイプへの変更の追加修正。 linked list 構造になっているので GC 用の mark 関数でリストを辿って全要素を mark するのに再帰していたのをループを使うようにしたり、変数の型を修正したりしています。

ko1: r60245 2017-10-21 18:24:59 +0900

tool/runruby.rb に RUNRUBY_USE_GDB という環境変数が "true" にセットされていたら rubygdb 経由で実行するようにしています。さらに run.gdb というファイルがあったらそれを使って実行するようにしています。これで make test-all するとすごい時間かかりそうですね。

nobu: r60246 2017-10-21 18:25:05 +0900

make update-bundled_gems で Gem::SpecFetcher.fetcher.detect を呼んでるところで他の情報も break で返すようにしています。が、この $$F ってなんだろう…。[追記]$F は -a オプションの時に入力を自動で split して格納されている特殊変数らしい。$$ になっているのは Makefile のエスケープ。[/追記]

hsbt: r60247 2017-10-21 18:50:36 +0900

make test-bundled-gems というターゲットを追加して、bundled gem のソースツリーを GitHub からとってきてテストを実施するようにしています。

svn: r60248 2017-10-21 18:50:37 +0900

r60247 の新規追加ファイルの svn property 設定。

knu: r60249 2017-10-21 18:53:52 +0900

標準添付ライブラリ drb の ACL 機能の ACL::ACLEntry.new で引数IP アドレスの net mask 部分が不正な時のエラーを無視してたのを、例外 IPAddr::InvalidPrefixError をそのまま発生させるようにしています。

ko1: r60250 2017-10-21 19:21:31 +0900

T_IMEMO 型オブジェクトのタイプの識別する部分のための bit mask の imemo_mask を enum imem_type の要素(っていうのかな)のひとつとして宣言してたのをマクロ定数に変更しています。

ko1: r60251 2017-10-21 19:23:59 +0900

r60250 で const 型の変数 imemo_name を不要な初期化してたのを revert しています。

tarui: r60252 2017-10-21 19:26:31 +0900

internal.h の IMEMO_FL_USHIFT についてのコメントを修正しています。 IMEMO_FL_USER3 が追加されているのに追随しています。

naruse: r60253 2017-10-21 19:28:34 +0900

Dir.glob に {a,b,c} のようなパターンマッチつきの時に fnmatch_helper() で分割して処理するように最適化しています。 Rails がこういう Dir.glob を使ってるそうなのでその高速化のためみたいです。 [ruby-core:82660] [Feature #13873]

sonots: r60254 2017-10-21 19:33:25 +0900

chomp_rs(), deleted_prefix_length(), deleted_suffix_length() に doxygen 用のコメントを追加しています。

naruse: r60255 2017-10-21 19:44:13 +0900

r60253 の Dir.glob の最適化を revert しています。 Linux でエラーが起きてたとのこと。

kazu: r60256 2017-10-21 20:59:08 +0900

svn:ignore property を同期しているとのこと。

usa: r60257 2017-10-21 21:12:52 +0900

拡張ライブラリ win32win32/registry の Win32::Registry#read, #write で REG_NONE というタイプに対応するようにしています。 REG_BINARY と同じ扱いにしています。 [ruby-core:50627] [Bug #7526]

nobu: r60258 2017-10-21 21:18:35 +0900

gc.c のインデント修正のみ。

nobu: r60259 2017-10-21 21:18:38 +0900

gc.c の rb_raw_obj_info() のswitch 文で警告除去のために default 節と UNREACHABLE; を追加しています。

akr: r60260 2017-10-21 21:22:46 +0900

拡張ライブラリ socket の Socket.gethostbyaddr の rdoc 用コメントにサンプルコードを追加しています。

nobu: r60261 2017-10-21 21:34:13 +0900

標準添付ライブラリ scanf の浮動小数点数対数表現の時の E/e の後に符号がなくても受け付けるように修正しています。おおー。でも最近 scanf 使ってないな…。 https://github.com/ruby/ruby/pull/1689 [ruby-core:82435] [Bug #13833]

kosaki: r60262 2017-10-21 21:57:14 +0900

拡張ライブラリ psych の ext/psych/yaml/scanner.c で未使用の式の警告除去のために代入するためだけの変数が、今度は未使用の変数の警告を出してるので、変数は削除して (void) のキャスト(っていうのかな)を付けるように変更しています。

kosaki: r60263 2017-10-21 22:01:51 +0900

ext/psych/yaml/scanner.c に他にも同様の未使用変数の警告があったので除去しています。

kosaki: r60264 2017-10-21 22:02:04 +0900

拡張ライブラリ psych の ext/psych/yaml/emitter.c の PUT_BREAK() というマクロで値を捨てている式があるという警告が出てるので条件演算子の書きかたを変更しています。これは等価なのかな。脳内 parse が難しい。

yui-knk: r60265 2017-10-21 22:06:36 +0900

node.h からすでに削除されている関数 rb_node_newnode_longlife() の宣言を削除しています。

akr: r60266 2017-10-21 22:13:02 +0900

拡張ライブラリ socket の Socket.gethostbyname と Socket.gethostbyaddr の rdoc 用コメントに、これらのメソッドが deprecated であることを追記しています。 このメソッドで利用されている getaddrinfo(3) と getnameinfo(3) の仕様や thread safe でないという問題により、これらのメソッドが他の Thread を block してしまうことや戻り値が扱いにくい形式であることなどを理由として追記しています。 [ruby-core:78947] [Feature #13097]

kosaki: r60267 2017-10-21 22:15:11 +0900

拡張ライブラリ psych の yaml_emitter_write_indicator() の引数 indicator に const 修飾子をつけて警告除去しています。呼び元で const のついた変数引数に渡して警告が出てたみたいです。

kosaki: r60268 2017-10-21 22:15:23 +0900

拡張ライブラリ psych の yaml_emitter_write_block_scalar_hints() で変数const 修飾子を追加しています。これも警告除去のため。

hsbt: r60269 2017-10-21 22:17:54 +0900

r60247 の make test-bundled-gems で bundled gem のソースディレクトリgem install の --install-dirspec/rspec から .bundle に改名しています。テストに rspec 使ってるとは限らないから、ということかな。

knu: r60270 2017-10-21 22:34:19 +0900

標準添付ライブラリ ipaddr を upstream から最新版をマージしています。 IPAddr#prefix, IPAddr#loopback?, IPAddr#private?, IPAddr#link_local? などのメソッドの追加、不正な netmask をエラーにする機能、IPAddr#ipv4_compat などのメソッドの deprecate にして警告メッセージを出すようにするなどの変更がどーんと入っています。 [Feature #11666] [Feature #10912] [Bug #13399] [Bug #13769]

knu: r60271 2017-10-21 22:34:22 +0900

r60249 で追加した drb/acl のテストに r60270 でマージした ipaddr-1.2.0 での不正な mask の検出に対応したテストを追加しています。

knu: r60272 2017-10-21 22:38:03 +0900

r60270 の NEWS ファイルの追記のチケット参照の記法を修正。 [Bug #13769]

hsbt: r60273 2017-10-21 22:40:12 +0900

Hash#update, #merge! の rdoc 用コメントのサンプルに receiver の内容が破壊的に変更されていることを示す行を追加しています。 https://github.com/ruby/ruby/pull/1652

hsbt: r60274 2017-10-21 22:49:39 +0900

File.unlink や File.delete の rdoc 用コメントに unlink(2) システムコールが返すエラーを Errno::Xxxx の例外で発生させることがあることを追記しています。 https://github.com/ruby/ruby/pull/1505

hsbt: r60275 2017-10-21 22:58:31 +0900

標準添付ライブラリ resolv の Resolv::MDNS#each_address で ".local" でおわるアドレスが渡された時にエラーになってた不具合を修正しています。 https://github.com/ruby/ruby/pull/1484

svn: r60276 2017-10-21 22:58:32 +0900

r60275 の新規追加ファイルの svn property 設定。

nobu: r60277 2017-10-21 23:06:22 +0900

r60243 の tool/vcs.rb の git で revision 番号検出の修正。 git log で最後のコミットsvn に入ってないものだと取れないのに対応したのかな。

hsbt: r60278 2017-10-21 23:11:08 +0900

標準添付ライブラリ irb で $SAFE が 3以上というチェックがあって、$SAFE 3以上というのはもうサポートされてないので削除しています。 https://github.com/ruby/ruby/pull/1713

nobu: r60279 2017-10-21 23:19:23 +0900

拡張ライブラリ etc の Etc.sysconfdir の rdoc 用コメントで Windows 向けの追記をしています。 [ruby-core:43110] [Bug #6121]

akr: r60280 2017-10-21 23:21:52 +0900

r60266 で拡張ライブラリ socket の Socket.gethostbyname と Socket.gethostbyaddr が deprecated だとコメントに追記したに対応して、代替として Addrinfo.getaddrinfo, Addrinfo#getnameinfo があることも追記しています。

kosaki: r60281 2017-10-21 23:21:56 +0900

標準添付ライブラリ fileutils の FileUtils.cp のテストで assert_equal_filemode という独自 assertion の第4引数に ~File.umask を渡して umask の設定に依存した失敗を回避するようにしているようです。

kazu: r60282 2017-10-21 23:22:04 +0900

r60271 のテストの追加で assert_raise のブロック内に2つ式を追加していたので2つ目が実行されなくなってたので、assert_raise を分けるように修正しています。

kosaki: r60283 2017-10-21 23:22:12 +0900

拡張ライブラリ pathname のテストでも umask の設定に依存している assertion を File.umask を考慮するように修正しています。

glass: r60284 2017-10-21 23:25:46 +0900

Linux の新しめのカーネルで追加された copy_file_range(2) というシステムコールを IO.copy_stream で利用して高速化を図っています。kernel 内で直接移動するので user land へのコピーが不要になるということですね。

sonots: r60285 2017-10-21 23:31:21 +0900

ヘッダの構造体や enum 型のメンバーに doxygen 用のコメントを追加しています。こんなふうに各メンバーにも書けるのか。

yui-knk: r60286 2017-10-21 23:32:32 +0900

parse.y の new_op_assign() というマクロの定義を本体用と ripper 用で別々に定義するようにしています。定義内容は同じだけど、なぜだろう…。同じだったら共有したほうが良さそう(最近 parse.y では共通化する方向の変更が多い気がする)けど。

ko1: r60287 2017-10-21 23:35:19 +0900

r60281 の FileUtils のテストで umask の影響を考慮させるのに assert_equal_filemode の第4引数に渡してましたが、umask キーワード引数(オプション?)で渡すのが正解だったようです。

kazu: r60288 2017-10-21 23:40:03 +0900

標準添付ライブラリで caller を使って呼び元のメソッド名などを取得する時に第2引数で取得するフレーム数も指定して余分なオブジェクトを生成しないように節約しています。

yui-knk: r60289 2017-10-21 23:51:07 +0900

r60286 の続き。 parse.y の new_op_assign_gen() の ripper 版の定義で column 引数が不要なので削っています。なるほどここで差が出るから分離したんですね。

hsbt: r60290 2017-10-21 23:55:22 +0900

拡張ライブラリ fiddle の fiddle/cparser の rdoc 用コメントのサンプルコードに明示的な require "fiddle" を追記しています。 https://github.com/ruby/ruby/pull/1666

hsbt: r60291 2017-10-22 00:02:25 +0900

README.md の記法の変更(Mix-in -> mix-in, ruby -> Ruby, OS X -> macOS など)や余分な空白除去など。 https://github.com/ruby/ruby/pull/1610

svn: r60292 2017-10-22 00:02:26 +0900

version.h の日付更新。

k0kubun: r60293 2017-10-22 00:02:46 +0900

標準添付ライブラリ erb で #frozen-string-literal: true の magic comment を付けるようにしています。破壊的変更が必要な文字列リテラルには String#+@ を使って dup しておくようにしています。

hsbt: r60294 2017-10-22 00:16:54 +0900

IO.write の rdoc 用コメントに offset が省略された時の挙動について mode との関係も追記しています。 https://github.com/ruby/ruby/pull/1571 [ruby-core:71277] [Bug #11638]

hsbt: r60295 2017-10-22 00:19:45 +0900

doc/syntax/methods.rdoc に代入記号つきメソッド戻り値は式の評価結果では無視されて右辺値がそのまま代入式の値になることを追記しています。 https://github.com/ruby/ruby/pull/1682

svn: r60296 2017-10-22 00:19:46 +0900

r60295 の行末の空白除去。

akr: r60297 2017-10-22 00:21:26 +0900

標準添付ライブラリ securerandom に SecureRandom.alphanumeric というメソッドを新設しています。これは hex (16進数)にかぎらず a-z, A-Z, 0-9 の英数字全部を使って乱数を元にした文字列を生成するメソッドのようです。このために private なメソッドとして choose というのも追加しています。チケットの提案としては choose も public なメソッドとして追加しようというものだったみたいですけど。名前がいまいちってことでとりあえず private にしているようです。 [ruby-core:68098] [Feature #10849]

knu: r60298 2017-10-22 00:38:38 +0900

標準添付ライブラリ set の SortedSet に freeze メソッドを追加して、freeze された時に to_a を呼び出して @keys をセットしておくようにしています。freeze するとちゃんと動かなくなってたみたいです。 [ruby-core:73897] [Bug #12091]

k0kubun: r60299 2017-10-22 00:39:35 +0900

benchmark/driver.rb に --rbenv オプションを指定して、rbenv を使って複数のバージョンを切り替えた実行をできるようにしています。 https://github.com/ruby/ruby/pull/1724

usa: r60300 2017-10-22 00:43:05 +0900

__dir__ の返す文字列の Encoding を __FILE__ と同じく locale encoding に変換するようにしています。 Windows 向け、かと思いきや macOS でも NFD/NFC の正規化の扱いで UTF-8-MAC という Encoding があったりするので影響あるようです。

k0kubun: r60301 2017-10-22 00:45:32 +0900

benchmark/driver.rb に shebang を追加して直接実行できるようにしています。 うーん env 使うと誰かが文句をいいそう。

yui-knk: r60302 2017-10-22 00:56:03 +0900

T_NODE 型オブジェクトの NODE_IASGN2 というノードは未使用になっていたそうなので削除しています。

knu: r60303 2017-10-22 00:57:26 +0900

標準添付ライブラリ set で 特異メソッドコンテキストでなぜかブロック渡しで module_eval していたところがあったので module_eval 削って直接実行するようにしています。

knu: r60304 2017-10-22 00:57:32 +0900

標準添付ライブラリ set の SortedSet.setup が multi thread でうまく動作しないそうで Mutex を追加して排他するようにしています。 [ruby-core:81985] [Bug #13735]

k0kubun: r60305 2017-10-22 01:01:48 +0900

man/erb.1 に -r オプション説明を追記しています。

hsbt: r60306 2017-10-22 01:05:01 +0900

r60275 で追加した Resolv::MDNS#each_resource のテストが Raspberry Pi の環境では Errno::EADDRNOTAVAIL で失敗するそうなので rescue して無視するようにしています。

yui-knk: r60307 2017-10-22 01:09:51 +0900

T_NODE 型のオブジェクトの NODE_CVDECL という NODE も未使用になっているそうなので削除しています。結構未使用の NODE ありそう。

hsbt: r60308 2017-10-22 01:11:58 +0900

IO#gets, IO#readline, IO#readlines, IO#each_line などの rdoc 用コメントに chomp オプションについて追記しています。正確には各メソッドには getline_args という名前で書いておいて、IO.readlines の rdoc コメントに詳細はまとめて書いておくという記法になっています。 https://github.com/ruby/ruby/pull/1717

akr: r60309 2017-10-22 01:12:46 +0900

r60297 で追加した Random::Formatter#choose で、とりあえず雑に文字数ぶん乱数を生成して候補の文字から取得して join していたのを、複数の文字ぶん一気に1回の乱数生成で決定するようにしています。

naruse: r60310 2017-10-22 01:25:19 +0900

拡張ライブラリ opensslOpenSSL::SSL::SSLContext#min_version= や #max_version= で Symbol による指定が使えないのに rdoc には書いてあったので、METHODS_MAP のテーブルを lookup するように修正しています。

naruse: r60311 2017-10-22 01:25:22 +0900

r60310 で修正した OpenSSL::SSL::SSLContext#min_version= と #max_version= を利用して、標準添付ライブラリ net/http でも min_version, max_version というオプションに対応して受け付ける SSL/TLS の方式の範囲を限定できるようにしています。 [ruby-core:60108] [Feature #9450]

knu: r60312 2017-10-22 01:28:52 +0900

標準添付ライブラリ set の Set#superset?, #proper_superset?, #subset?, #proper_subset? などのメソッドで @hash が比較演算子に対応しているかチェックするようにしています。ふーむどうやら SortedSet は RBTree というのを利用しているので、all? を使った実装を使わないといけなかったようです。 [ruby-core:73807] [Bug #12072]

naruse: r60313 2017-10-22 01:34:34 +0900

r60311 で追加した Net::HTTP の min_version, max_version のテストの assertion でログや例外メッセージの内容が異なっていたのでマッチさせる正規表現を修正しています。

naruse: r60314 2017-10-22 01:43:54 +0900

r60253 の Dir.glob の最適化の再チャレンジ。 {a,b,c} みたいなパターンがあった時の最適化を flags に FNM_EXTGLOB が指定されてるかどうかチェックしてから行うようにしています。…と思ったけどコミットログが "ignore server side error" で r60311 の Net::HTTP のテストの修正が一緒に入っているので、どうやらコミットミスっぽいですね。

naruse: r60315 2017-10-22 01:44:56 +0900

やっぱりコミットミスだったようで r60314 を revert しています。

naruse: r60316 2017-10-22 01:44:56 +0900

r60311 の Net::HTTP のテストでログの assertion は削って server 側のエラーは無視するようにしています。

knu: r60317 2017-10-22 02:03:40 +0900

標準添付ライブラリ set の Set#collect! で self.class.new(self) としていたのをやめて、引数なしで self.class.new してから each でループ回してセットするようにしています。これはサブクラスの initialize で collect! を使ってると無限ループに陥る可能性があるから、とのこと。 [ruby-core:75770] [Bug #12437]

2017-10-20 ruby-trunk-changes r60216 - r60219

[][]ruby-trunk-changes r60216 - r60219

今日は rubygems の不具合修正と、Time.parse の offset の秒までの精度の対応や FileUtils.cp_r でコピー先の削除をする時の挙動の修正などがありました。

nobu: r60216 2017-10-20 10:03:18 +0900

標準添付ライブラリ time の Time.parse でタイムゾーン(offset)が秒までの表示もあった時にも対応できるように拡張しています。 秒単位のずれのあるタイムゾーンってあるのかな(15分単位でずれてるのはあるみたいだけど)。 [ruby-core:83400] [Bug #14034]

svn: r60217 2017-10-20 10:03:19 +0900

version.h の日付更新。

hsbt: r60218 2017-10-20 16:03:11 +0900

標準添付ライブラリ fileutils の FileUtils.cp_r などで remove_destination オプションが true に指定されていた時にコピー先のパスが通常ファイルの時だけ削除していましたが、symbolic link の時も削除して上書きするようにしています。 https://github.com/ruby/fileutils/pull/9 [ruby-core:82846] [Bug #13914]

hsbt: r60219 2017-10-20 18:03:37 +0900

rubygems の upstream から master の最新版をマージしています。ひとつ不具合修正が入っているようです。 https://github.com/rubygems/rubygems/issues/2041

2017-10-19 ruby-trunk-changes r60206 - r60215

[][]ruby-trunk-changes r60206 - r60215

今日は先日の webrickTLS で使った時の不具合修正の再修正、a < x < b のような比較演算子が連続した式の警告出力の追加、インデント除去つきヒアドキュメントのインデント判定の不具合修正などがありました。

nobu: r60206 2017-10-18 22:08:53 +0900

parse.y の比較演算子のルールを、比較演算子トークンをまとめて relop というノードにすることで 1つのルールにまとめるリファクタリング

nobu: r60207 2017-10-18 22:08:53 +0900

比較演算子が a < x < b のように連続している式に警告を出すようにしています。

normal: r60208 2017-10-19 06:45:34 +0900

r60172 以降の WEBrickTLS を使った時に accept が block する可能性がある不具合修正の再修正。 まず accept_nonblock でなく accept を利用するように戻しています。 [Bug #14013] [Bug #14005]

svn: r60209 2017-10-19 06:45:35 +0900

version.h の日付更新。

normal: r60210 2017-10-19 08:23:33 +0900

r60208 の続きで r60172 の再修正。 タイムアウトの設定を OpenSSL::SSL::SSLSocket#accept の部分だけにかけるように修正しています。

normal: r60211 2017-10-19 08:34:02 +0900

r60208 と r60210 のさらに続き。 Thread の ブロック内で return してしまっていたので Thread.exit で終了させるようにしています。

nobu: r60212 2017-10-19 13:25:30 +0900

拡張ライブラリ ripper の Ripper::Lexer の <<~ によるインデント除去つきヒアドキュメントのコールバックでインデント部分の引数が正しく渡されないことがある不具合を修正しています。 [ruby-core:83343] [Bug #14027]

nobu: r60213 2017-10-19 14:10:38 +0900

同じくインデント除去つきヒアドキュメントで、行頭に # があった時にインデントの深さの判定には使われないようになっていたのに、2.4 以降では使われてしまっていた不具合があったのを修正しています。 [ruby-core:83368] [Bug #14032]

# は無視されるのか、知らなかった…。

nobu: r60214 2017-10-19 19:58:08 +0900

Complex と Rational が常に freeze された状態になるようにしています。 おお、まだされてなかったのか。 [ruby-core:83167] [Feature #13983]

nobu: r60215 2017-10-19 20:24:03 +0900

Process.setproctitle で $0 に NUL 文字を含む文字列をセットしようとしたら例外が発生するようにしています。また NUL 文字で終端していない文字列でも扱えるようにしています。 [ruby-core:82425] [Bug #13829]

2017-10-18 ruby-trunk-changes r60201 - r60205

[][]ruby-trunk-changes r60201 - r60205

今日はソースの整形と rdoc 用コメントの修正だけでした。

nobu: r60201 2017-10-17 21:30:11 +0900

node.c のインデントの修正と余計なセミコロンの除去。

nobu: r60202 2017-10-17 21:30:12 +0900

コマンドラインオプションの --dump=parsetree や --parsetree-with-comment の実装 dump_node() で switch 文の各ノード用の case 節で break してたのを直接 return するようにして、未対応の NODE があった時には rb_bug() で落とすのを default ではなくて switch 文の後に書くようにしています。

nobu: r60203 2017-10-17 21:40:00 +0900

標準添付ライブラリ tempfile の Tempfile.create の rdoc 用コメントで引数を列挙している部分の抜けを修正しています。 [ruby-core:83321] [Misc #14019]

nobu: r60204 2017-10-18 13:35:25 +0900

外のスコープの変数と同名の変数宣言を解消しています。なお r60201 のインデント修正もだと思いますが、コンパイラの警告をエラー扱いにするように -Werror=misleading-indentation、-Werror=duplicated-cond、-Werror=restrict などの gccオプションを追加しています。

svn: r60205 2017-10-18 13:35:27 +0900

version.h の日付更新。