ruby-trunk-changes r58795 - r58826

今日はたくさんのコミットがあって、Prime.prime? の不具合修正、erb の trim_mode の Windows 対応の修正、いろいろな最適化などがありました。また今日は新しいコミッタの watson さんの初コミットがありました。Welcome!

usa: r58795 2017-05-19 21:44:46 +0900

r58791 の Tempfile.create の後始末の変更ですがやっぱり Windows では開いたファイルを消すのはだめだったみたいで閉じてから消すようにテストを修正しています。そうかよくみると Tempfile.create の実装のほうは unlink で失敗したら close 後にリトライするようになってたからそっちは問題ないのか。

naruse: r58796 2017-05-19 23:14:52 +0900

util.c の ruby_strtod() に参考にした dtoa.c の実装の修正を取り込んでいます。移植性や精度についての修正があるみたいです。チケットをみると clang 4.0.0 での Float の parse のエラーだそうですが結構奥が深そう…。 [ruby-core:81003] [Bug #13545]

nobu: r58797 2017-05-19 23:58:38 +0900

命令列をダンプする dump_disasm_list() から現在位置を引数に受け取る dump_disasm_list_with_cursor() を切り出して現在位置に "*" でマークをつけて出力できるようにしています。コンパイルエラー時の出力に使うみたいですね。

naruse: r58798 2017-05-20 00:13:42 +0900

標準添付ライブラリ Net::HTTP#start の第3引数のデフォルト値を :ENV にして、Net::HTTP.new の引数と揃えています。 proxy の設定を環境変数から取得するようにする指定で、一応挙動の変化なので NEWS ファイルにも追記されています。 [ruby-core:80272] [Bug #13351]

svn: r58799 2017-05-20 00:13:42 +0900

version.h の日付更新。

naruse: r58800 2017-05-20 01:06:18 +0900

標準添付ライブラリ net/http の HTTP status を表現するコートとクラスのマッピングに HTTPProcessing(102), HTTPAlreadyReported(208), HTTPMisdirectedRequest(421), HTTPUnavailableForLegalReasons(451), HTTPVariantAlsoNegotiates(506), HTTPLoopDetected(508), HTTPNotExtended(510) などを追加しています。ただクラス定義は r58803 で追加されています。
451 の UnavailableForLegalReasons はちょっと前に話題になってましたね。

naruse: r58801 2017-05-20 01:06:25 +0900

標準添付ライブラリ net/http に Net::HTTP::STATUS_CODES という定数を追加して HTTP status の code から文字列表現へのマッピングを Hash として格納しています。 lib/net/http/status.rb というファイルで追加していて、このファイルは単体でスクリプトとして実行すると https://www.iana.org/assignments/http-status-codes/http-status-codes-1.csv からデータを取得してきて自分自身を再生成するしくみになっています。 [ruby-core:78126] [Misc #12935]

svn: r58802 2017-05-20 01:06:26 +0900

r58801 で新規追加したファイルの svn property 設定

naruse: r58803 2017-05-20 01:19:46 +0900

r58800 で追加した HTTP ステータスのコードに対応するクラス定義を追加しています。

normal: r58804 2017-05-20 03:34:38 +0900

struct mutex_waiter を struct sync_waiter に改名しています。

normal: r58805 2017-05-20 03:53:11 +0900

r58804 で改名した struct sync_waiter の linked list を使って Queue、SizedQueue と ConditionVariable の同期処理を全面的に書き換えています。パワーあるなぁ。 [ruby-core:81235] [Feature #13552]

normal: r58806 2017-05-20 06:33:15 +0900

TCPSocket で OOB (Out-of-band) データが受信されている時に IO.select した時のテストをしています。

normal: r58807 2017-05-20 06:34:04 +0900

r58806 のテストで TCPSocket#send の戻り値の計算間違いを修正。

hsbt: r58808 2017-05-20 08:39:58 +0900

標準添付ライブラリ fileutils の .gemspec ファイルを更新して spec.homepage を変更しています。

marcandre: r58809 2017-05-20 09:36:55 +0900

標準添付ライブラリ prime で Math.sqrt を使っていたところを 2.5 から導入される Integer.sqrt を利用するように書き換えています。Prime#prime? が浮動小数点数の精度の問題で誤って true を返すことがあったみたいですね。まじか。 [ruby-core:80821] [Bug #13492]
確認のために Prime.prime?(22528399544939171409947441934790321) を実行してみたんだけど終わらない…。

nobu: r58810 2017-05-20 11:11:24 +0900

VM 命令列へのコンパイル時に未使用コードの削除で LABEL で参照している部分を消してしまうことがあった不具合を修正しています。まじか。ただ再現コードみるとよっぽど人工的なコードじゃないと発生しなさそう。 [ruby-core:81272] [Bug #13578]

watson1978: r58811 2017-05-20 18:23:46 +0900

Hash#merge のパフォーマンス改善。メソッド呼び出しを含む rb_obj_dup() のかわりに rb_hash_dup() を直接起動するようにしています。 https://github.com/ruby/ruby/pull/1533 [ruby-dev:50026] [Bug #13343]
新しくコミッタになった watson さんの初コミットです。

normal: r58812 2017-05-20 18:47:14 +0900

マルチスレッド環境での IO#close を高速化しています。 rb_thread_t から waiting_fd メンバを削除して、かわりに rb_vm_t に waiting_fds として linked list で struct waiting_fd という新たに定義した構造体を持たせるようにしています。これにより vm->living_thread を全て舐めてチェックする必要がなくなって、IO 待ちをしている Thread の数だけループを回せばよくなります。

stomar: r58813 2017-05-20 19:21:44 +0900

標準添付ライブラリ prime のコメントの typo 修正と、テストコードに追加した alias の後始末を追加しています。

nobu: r58814 2017-05-20 19:27:27 +0900

compile.c の compile_branch_condition() で NODE_AND と NODE_OR の右辺値のための分岐命令を、変数 cond を書き換えて goto で先頭にジャンプして同じコードを再利用するようにしています。でもこれ then_label とか else_label の書き換えが変わってしまうのでは? と思ったけど cond を書き換えているから 2回目は別のところにいってうまいこと書き換えられるのかな。

nobu: r58815 2017-05-20 20:40:57 +0900

compile.c で compile_branch_condition() や iseq_compile_each0() で LABEL::refcnt を利用して到達できない場所を検出して不要な分岐ノードの生成を抑制するようにしています。

mame: r58816 2017-05-20 21:23:27 +0900

拡張ライブラリ ripper の ext/ripper/depend で parse.y から parse.c を生成した後処理の sed コマンドでコメントのファイル名を書き換えようとしていたところで、既に y.tab.c が parse.c に書き換えられていたのでうまくいってなかったのを修正しています。

mame: r58817 2017-05-20 22:00:41 +0900

make gcov というターゲットを追加して、C レベルの coverage を取得するようにしています。

svn: r58818 2017-05-20 22:00:42 +0900

r58817 で新規追加されたファイルの svn property 設定。

k0kubun: r58819 2017-05-20 23:55:33 +0900

標準添付ライブラリ erb の ERB::Compiler::SimpleScanner というクラスはテストでした使われていなかったそうなので SimpleScanner2 という似たような実装(なんで 2つあったんだろ)を SimpleScanner に改名して元の実装は削除しています。SimpleScanner2 も別名として残しています。

naruse: r58820 2017-05-21 00:58:16 +0900

標準添付ライブラリ net/http のテストで proxy に影響する環境変数を取り除いてテストすべきところがそのままのところがあったので修正しています。

svn: r58821 2017-05-21 00:58:17 +0900

version.h の日付更新。

k0kubun: r58822 2017-05-21 01:20:07 +0900

r58819 の変更で require "strscan" で例外時に SimpleScanner の定義をスキップしようとするところで begin ... rescue の中にクラス定義を入れてましたが、捕捉したい例外発生源をより明確にするために else 節に入れるようにしています。

k0kubun: r58823 2017-05-21 01:50:33 +0900

標準添付ライブラリ erb の ERB::Compiler::TrimScanner で改行を削る時に改行コードが "\r\n" の場合も考慮するようにしています。 [Bug #11464]

k0kubun: r58824 2017-05-21 02:03:01 +0900

doc/maintainers.rdoc の erb のメンテナに k0kubun さんも追加しています。

k0kubun: r58825 2017-05-21 02:17:22 +0900

標準添付ライブラリ erb の ERB::Compiler::TrimScanner で今度は trim_mode が - の時にも改行コード \r\n を考慮するように修正しています。 [ruby-core:39625] [Bug #5339]

k0kubun: r58826 2017-05-21 02:36:09 +0900

標準添付ライブラリ erb の ERB::Compiler::TrimScanner で最後に trim_mode が ">" の時も改行コード \r\n の考慮をするようにしています。 [Bug #5339] [Bug #11464]