ruby-trunk-changes r60423 - r60456

今日は IO#write の複数引数受付により IO を模倣しているオブジェクトで write が1引数しか受け付けない時の警告出力や net/http の Host ヘッダの IPv6 アドレスの時の不具合などがありました。

nobu: r60423 2017-10-25 21:04:53 +0900

write メソッドを実装して IO 風に振る舞うオブジェクトで r60417 で IO#puts で writev() 対応した時にwrite メソッドの呼び出しに fallback した時に、write メソッドが 1つしか引数を受け付けないようになっていた時には警告メッセージを出力するようにしています。 [ruby-core:83529] [Feature #14042]

nobu: r60424 2017-10-25 21:31:30 +0900

IO#puts の writev(2) 対応のテストで writev(2) が使えない環境ではこけるものを portable でないとして skip するようにしています。 そりゃそうだ。 [ruby-core:83508] [Feature #14042]

nobu: r60425 2017-10-25 21:33:42 +0900

Kernel#p の実装である(内部からも呼ばれる) rb_p() も writev(2) 対応の関数 rb_io_writev() を呼び出すようにして改行の出力を可能なら1つのシステムコールで実行するようにしています。

kazu: r60426 2017-10-25 21:57:34 +0900

Array#max, Array#min などのメソッドの rdoc 用コメントのサンプルコードでブロックパラメータに receiver と同じ変数名を使っていて警告が出るようなサンプルになっていたのを修正しています。 https://github.com/rurema/doctree/pull/697

mame: r60427 2017-10-25 22:19:45 +0900

r60239 で VM 内部で使う一時バッファの確保用の NODE_ALLOC を T_IMEMO 型のオブジェクトのサブタイプを使うように置き換えてましたが、T_IMEMO 型のオブジェクトは一時期頑張って Write Barrier を追加して WB-protected にしたのですが、バッファ内の VALUE 型の要素は C のコードから直接触ってて Write Barrier がきいてないので、これを使って確保した時には WB-unprotected にマークするようにしています。

usa: r60428 2017-10-25 22:29:27 +0900

r60417 の IO#puts の writev(2) 対応で Windows でのテストで後始末時に close が Errno::EPIPE で失敗していたそうで、rescue を追加しています。並列テスト時におきるのかな。

mame: r60429 2017-10-25 22:38:53 +0900

r60427 の T_IMEMO 型オブジェクトを一時バッファ用に確保する時に WB-unprotected にする修正を rb_imemo_alloc_new() という関数に切り出しています。

nobu: r60430 2017-10-25 23:25:39 +0900

make update-gems で更新されなかった古い gem ファイルを削除するようにしています。

nobu: r60431 2017-10-26 08:35:46 +0900

tool/fetch-bundled_gems.rb で shebang を使って -an オプションをつけるようにして自動 split モードで動作するようにして、シェル依存で Windows で動かない tool/git-refresh というツールの呼び出ししていたのを避けるようにしているそうです。

svn: r60432 2017-10-26 08:35:47 +0900

version.h の日付更新。

kazu: r60433 2017-10-26 08:45:33 +0900

test/ostruct/test_ostruct.rb の #frozen_string_literal magic comment を true に変更しています。

nobu: r60434 2017-10-26 09:59:13 +0900

make test-bundler のルールを Makefile.in から common.mk に移動しています。 nmake でも動くはず、とのこと。

nobu: r60435 2017-10-26 09:59:15 +0900

make test-bundled-gems も test-bundled-gems-run という gems/bundled_gems の1行ごとに処理する部分のルールのみ残して common.mk に移動しています。 win32/Makefile.sub にも test-bundled-gems-run を追加しています。

nobu: r60436 2017-10-26 10:36:52 +0900

make update-gems, update-bundled_gems などで ruby に -e オプションでスクリプトを渡すところで Windows のシェルではエスケープが必要な文字が残ってたのでクオートを修正しています。うーんでもシングルクオートはだめでダブルクオートなら大丈夫? なんとなくダブルクオートのほうがメタキャラクタとして扱われそうだけど Windows では逆なんですな。

marcandre: r60437 2017-10-26 15:58:09 +0900

Tracepoint#enable と #disable からブロックを起動する時に引数 nil を渡して起動するようになっていたのを引数なしで起動するように修正しています。 [ruby-core:83572] [Bug #14057]

nobu: r60438 2017-10-26 16:23:23 +0900

Array/Hash/Symbol への変換関数 rb_to_ary_type(), rb_to_hash_type(), rb_to_symbol_type() という関数を extern 関数として定義/改名して、rb_convert_type_with_id() を呼んで変換していた箇所でこれを使うようにリファクタリングしています。

nobu: r60439 2017-10-26 16:36:23 +0900

Windows での環境変数の名前のサイズについてのテストで利用可能なサイズの計算で終端文字 1文字ぶん間違っていたのを修正しています。

ko1: r60440 2017-10-26 17:32:49 +0900

rb_thread_t から rb_execution_context_t が埋め込みになっていたのを切り出して、ポインタで参照するようにし、Fiber で切り替えする時に内容のコピーでなくポインタの切り替えをするように変更しています。 Fiber の切り替えが高速になるのかな。

ko1: r60441 2017-10-26 17:41:34 +0900

r60440 の変更に追随して、rb_execution_context_t だけ使えばいいところで rb_thread_t を扱っていたところを GET_EC() で rb_execution_context_t だけ取得したり引数を変更したりしています。

ko1: r60442 2017-10-26 17:42:44 +0900

r60441 の続きで struct cont_saved_vm_stack コメントに書いてある th->ec->... を ec->... に変更しています。

mame: r60443 2017-10-26 17:45:14 +0900

r60429 で導入した rb_imemo_alloc_new() の定義を gc.c の前のほう、rb_imemo_new() の後に移動して、rb_imemo_alloc_new() を呼び出してたのを独自に newobj_of() を呼ぶようにしています。

ko1: r60444 2017-10-26 19:49:33 +0900

rb_vm_search_cf_from_ep() も引数の rb_thread_t を rb_execution_context_t に変更しています。

ko1: r60445 2017-10-26 19:50:45 +0900

VM_CFP_IN_HEAP_P() も引数の rb_thread_t を rb_execution_context_t に変更しています。

ko1: r60446 2017-10-26 19:52:05 +0900

rb_vm_ep_in_heap_p() も th でなく ec だけ使えばよかったので GET_THREAD() を GET_EC() に変更しています。

ko1: r60447 2017-10-26 19:53:42 +0900

vm_push_frame() も引数の rb_thread_t を rb_execution_context_t に変更しています。

ko1: r60448 2017-10-26 19:55:24 +0900

rb_vm_pop_frame() も引数の rb_thread_t を rb_execution_context_t に変更しています。

ko1: r60449 2017-10-26 19:57:16 +0900

backtrace_each() も引数の rb_thread_t を rb_execution_context_t に変更しています。

ko1: r60450 2017-10-26 20:02:13 +0900

大域脱出時のための TAG を作る TH_PUSH_TAG() や TH_POP_TAG() などのマクロも TH_... のかわりに EC_... を定義してこちらを使うようにしています。おお、これはでかい。けどこれらのマクロは内部的なものなので拡張ライブラリには影響ないんですね(なんとなく使えるような気がしてしまってた)。

ko1: r60451 2017-10-26 23:21:31 +0900

rb_threadptr_root_fiber_setup() で rb_thread_t::root_fiber をセットしていたのをやめて、thread_free() から ec 部分の mark 処理は rb_threadptr_root_fiber_release() に切り出して、root_fiber が別にあるときはそちらにまかせてここでは解放しないようにしています。

ko1: r60452 2017-10-26 23:28:43 +0900

Fiber#transfer のテストがこけることがあるそうでとりあえず skip するようにしています。

ko1: r60453 2017-10-26 23:38:22 +0900

fiber_switch() で th->root_fiber が未設定だったら(r60451 の変更でありえるようになった)ここで作成しておくようにしています。 r60452 で追加した Fiber#transfer の skip を消しています。

ko1: r60454 2017-10-26 23:44:09 +0900

GET_THREAD()->ec としていたところを GET_EC() マクロに置き換えています。

naruse: r60455 2017-10-27 00:29:36 +0900

標準添付ライブラリ net/http でリクエストヘッダの Host ヘッダにアドレスが IPv6 のフォーマットの時に正しい記法になっていなかった不具合を修正しています。 [ruby-core:76636] [Bug #12642]

svn: r60456 2017-10-27 00:29:37 +0900

version.h の日付更新。