ruby-trunk-changes 2019-06-12

今日は Mutex の lock と例外でデッドロックが発生する恐れがあった不具合修正や Refinements で無限再帰して異常終了することがあった不具合の修正などがありました。

[39ae88ad0d] Nobuyoshi Nakada 2019-06-11 13:31:57 UTC

140b8117bd3c32cb9d0b144937b90f0178a00b0e の再修正。 SyntaxError のメッセージで LHS という専門用語(?)だとわかりにくいので assignment destination を書くようにしています。

[eb016d8353] Nobuyoshi Nakada 2019-06-11 02:03:55 UTC

test/unit のオプションの --subprocess-timeout-scale を --timeout-scale に改名するようにしています。 6096baea5db6505206f0e636c4e5272b4eb72da4 で子プロセスを起動した時だけでなく Thread の待ちのタイムアウトにも使うようになったので subprocess という名前が不正確になったからですね。

[42f0a8fd6f] Nobuyoshi Nakada 2019-06-11 02:09:02 UTC

test/unit でカーネルの時間の解像度を設定する定数を Windows 環境の時に 67 Hz に調整するコードが元からありましたが、これをassert_cpu_usage_low 内の変数から定数にしています。 [ruby-core:81540]

[c4cbaef216] Nobuyoshi Nakada 2019-06-11 02:13:26 UTC

test/unit の assert_cpu_usage_low にキーワード引数 wait と stop を追加して一定時間経った時の停止処理を引数で指定できるようにして、また待ち時間も EnvUtil.apply_timeout_scale を適用するようにしています。しかしこの場合の wait は処理待ち時間というよりどの程度の長さベンチマーク走らせるかって意味があるような気がするのでスケールしていいのかな(使っているテストは一瞬しか待ってないのでこのケースには適当だと思いますが)。

[6db2d6d852] Aaron Patterson 2019-05-31 20:25:24 UTC

Fiber, Continuation および autoload のために内部的に保持するオブジェクトを GC.compact で移動可能にしています。

[23e3c1704b] git 2019-06-11 16:16:45 UTC

6db2d6d8520f88e25d97af77495eb6c879f90b21 のインデントのタブを空白に展開。

[4f9e7c95e4] git 2019-06-11 16:16:49 UTC

version.h の日付更新

[5e018214e7] Jeremy Evans 2019-06-10 22:47:56 UTC

Refinements で定義されているけど using で適用されていないメソッドの呼び出しで無限再帰に陥ることがあった不具合を修正しています。 call cache の method entry の上書きで同じものを入れてしまわないようにしてるんだと思いますが、この修正でいいのかちょっとぱっと見だと不安ですね。変更しないほうが逆に再帰してしまいそうな気がするけど逆なんだなぁ。 [ruby-core:91916] [Bug #15720]

[c1d78a7f0e] Neeraj Bhunwal 2019-04-16 04:03:08 UTC

標準添付ライブラリ monitor で deadlock が起きることがあるという不具合の修正。実際には monitor に固有の問題ではなくて組み込みの Mutex の lock 取得処理(正確には th->keeping_mutexes への rb_mutex_t 構造体の追加)前に割り込みチェックをするようにし、この時に mutex->th を一旦 0 クリアするようにしています。 RUBY_VM_CHECK_INTS_BLOCKING() では例外発生する可能性があり、そこで mutex->th がリークするとデッドロックになるため。 https://github.com/ruby/ruby/pull/2131 [ruby-core:90170] [Bug #15360]

[8354cfd03b] aycabta 2019-06-12 02:00:25 UTC

irb でインデントレベルを管理する処理で rescue 節も認識するように修正しています。

[9593e76ac2] Nobuyoshi Nakada 2019-06-12 06:23:47 UTC

拡張ライブラリ ripper で reline 向けに作ってたエラー時にエラー内容も含めてトークンリストを返す Ripper::Lexer#scan でエラー位置をより正確に返すようにしています。

[88411d350e] Nobuyoshi Nakada 2019-06-12 06:30:07 UTC

irb のテストで文字列のクオートが閉じてない時にエラー部分をハイライトされることをチェックするテストにテストケースを追加しています。

ruby-trunk-changes 2019-06-11

今日は parser が一部の不正な記法で SEGV する不具合の修正や TCPSocket でローカルアドレス指定時に SO_REUSEADDR を設定する変更などがありました。

[02155da7ba] Takashi Kokubun 2019-06-10 13:20:00 UTC

f42588f754d5885ec30631e5008c383f3ef905d8 で tool/file2lastrev.rb で定数マクロ RUBY_RELEASE_DATE にリリース版でない時に時刻まで含めるようにしてましたが、埋め込む時刻はツールを動かしてる環境のローカルタイムで表記するようにしています。

[f0bfa71ab3] Takashi Kokubun 2019-06-10 14:23:15 UTC

02155da7bad37bd1c8adadd486d2d16eac7af43b の再修正。時刻を埋め込む時の timezone を UTC 固定にしています。

[be6b462489] Kazuki Tsujimoto 2019-06-10 15:20:10 UTC

pattern match の文法のコンパイルでオブジェクトのクラスのチェックに putobject+checkmatch を使っていたところを checktype 命令を使うように最適化しています。

[d7e7e99862] git 2019-06-10 15:25:57 UTC

version.h の日付更新

[6096baea5d] Yusuke Endoh 2019-06-10 21:45:49 UTC

標準添付ライブラリ net/http のテストで Thread のタイムアウトに EnvUtil.apply_timeout_scale を経由した数値を使って環境変数でスケーリングできるようにしています。

[de4b2930f7] Yusuke Endoh 2019-06-10 21:53:33 UTC

拡張ライブラリ socket で TCPServer の時は自動的に setsockopt(3) で SO_REUSEADDR をつけてましたが、TCPSocket の時もローカルアドレスの指定があったら SO_REUSEADDR をつけるようにしています。 rubyspec でたまに失敗してしまうのでその対策とのこと。

[fe9701ee00] git 2019-06-10 21:56:46 UTC

de4b2930f71a88358c8f1968e410f420c54853bd のインデントのタブを空白に展開。

[4adc6f07ef] Yusuke Endoh 2019-06-10 22:15:31 UTC

test/unit の assert_cpu_usage_low という CPU 利用率をチェックする assertion のデフォルトのしきい値を 0.01 から 0.05 に引き上げてます。この assertion normalperson が追加したやつですけど追加直後にも引き上げられてて、なかなかきびしいというか不安定そうですよね。

[e4364dbf6e] Hiroshi SHIBATA 2019-06-11 03:16:26 UTC

bundler のテストのインデントの修正。

[42ac8890ef] Kazuhiro NISHIYAMA 2019-06-11 03:32:13 UTC

.travis.yml の before_script に ~/.irbrc が読まれたらエラーにするためにわざと例外を発生させる ~/.irbrc を生成しておくようにしています。

[140b8117bd] Nobuyoshi Nakada 2019-06-10 17:09:00 UTC

代入記号つきメソッドに &. 演算子を組み合わせて左辺値が複数の値に分解される x, y.&meth = 0 のような記法を parse するとエラー処理が不十分で SEGV していたので、SyntaxError を発生させるようにしています。
というかこれを読んでて気がついたんですけど、左辺値で複数の値を分解して代入する時って

a, x.b = [0, 1]

みたいなのもできるんですね。

ruby-trunk-changes 2019-06-10

今日は主に irb の起動速度の改善などがありました。

[60af6fef3c] Benoit Daloze 2019-06-10 10:45:00 UTC

rubygems の標準添付ライブラリ resolv のテストでシステムの /etc/hosts ファイルに依存しないように Resolv::Hosts.new の生成時に fixture のファイルを指定するようにしています。

[626ae5a9b6] Benoit Daloze 2019-06-10 10:47:08 UTC

同じく rubyspec の resolv のテストで Windows で実行除外していたものを外してテストするように復活させています。

[b9996b7b32] git 2019-06-10 10:48:08 UTC

version.h の日付更新

[973fd18f11] Takashi Kokubun 2019-06-10 12:13:12 UTC

irb を起動してすぐ終了するベンチマークを追加しています。

[976c689ad4] Nobuyoshi Nakada 2019-06-10 12:07:24 UTC

irb のタブ補完で rdoc のドキュメントを引くために rdoc も require していたのを、実際に必要になるまで遅延するようにして irb の起動時間を改善しようとしています。

[880204cf55] Nobuyoshi Nakada 2019-06-10 12:45:46 UTC

976c689ad478b8010b053aa270a28bd236b8380e の irb のタブ補完時に rdoc を引くようにメソッドを動的に再定義した時に再定義後と同じく nil を返すようにしています。

[caa90202c9] Takashi Kokubun 2019-06-10 13:04:51 UTC

973fd18f11f5026024fc43e2848db030110bdaee の irb 起動速度のベンチマークで -f オプションを追加して ~/.irbrc の読み込みを抑制するようにしています。

ruby-trunk-changes 2019-06-09

今日は bundler の更新や標準添付ライブラリ resolv の修正などがありました。

[a8ef498d6b] Nobuyoshi Nakada 2019-06-09 02:10:34 UTC

File.read の mode 引数に BOM をつけた時のテストの assertion にメッセージを追加したり assertion を追加したりしています。

[562c0bfeda] Nobuyoshi Nakada 2019-06-09 02:34:58 UTC

BOM つきのファイルからの読み込みのテストを大きなループで行なってたのを Encoding の変換有無などの条件でテストメソッドを分割するようにしています。

[a432c014c9] git 2019-06-09 03:30:40 UTC

version.h の日付更新

[6650899248] Jeremy Evans 2019-06-09 03:27:49 UTC

標準添付ライブラリ resolv の Rexolv::DNS#each_name の引数の Resolv::IPv4, Resolv::IPv6 などのクラスのインスタンスを受け付けるようにしています。 ドキュメントには受け付けるように書いてあったのに実際にはそうなっていなかったようです。 [ruby-core:92977] [Bug #15900]

[8f37629519] Hiroshi SHIBATA 2019-06-01 09:49:40 UTC

bundler を upstream からマージしています。

[57ccea6232] Hiroshi SHIBATA 2019-06-01 10:29:56 UTC

8f37629519ad330032a38ac0e871b2912ed38a1b の bundler の更新のうち gemspec ファイルの変更の一部を revert しています。ディレクトリ構成の違いによるものかな。

[44f7f093ab] Hiroshi SHIBATA 2019-06-09 02:00:07 UTC

8f37629519ad330032a38ac0e871b2912ed38a1b で更新した bundler のテストに rubyリポジトリディレクトリ構成に合わせた修正を追加しています。

[2c59c58a47] Hiroshi SHIBATA 2019-06-09 02:00:21 UTC

同じく bundler のテストで rubyディレクトリ構成にあわせた修正。

[614154bbb6] Hiroshi SHIBATA 2019-06-09 01:49:51 UTC

make test-bundler の前処理で gem パッケージインストール時に rake への依存関係も追加しています。

ruby-trunk-changes 2019-06-08

今日は rubygems の gem unpack の不具合修正や MacPortsgcc でのビルドエラー修正などがありました。

[b76630f73e] Nobuyoshi Nakada 2019-06-07 13:34:28 UTC

rubygems の個別のファイルに明示的な require 'rubygems/package' を追加しています。 gem unpack でのエラーを修正するためとのこと。

[75751dca2b] Yusuke Endoh 2019-06-07 14:33:23 UTC

openssl のテストのタイムアウトを伸ばしています。 armv7l での CI のエラー対策。

[ffaefcadd8] Nobuyoshi Nakada 2019-06-07 14:08:43 UTC

test/unit の並列実行時に子 worker が死んだ時の pipe からの読み出しの Errno::EPIPE を警告にするようにしています。

[19977cc761] aycabta 2019-06-07 14:54:49 UTC

reline のテストで謎の変数代入が残ってたのを削っています。

[1696f80f40] git 2019-06-07 15:15:42 UTC

version.h の日付更新

[3776c48cf4] Hiroshi SHIBATA 2019-06-08 04:44:40 UTC

b76630f73e8362d3072bfa7178471ddc5d21c235 の rubygems の明示的 require の追加を revert しています。 bundler のテストが失敗していた模様。

[21de4a574f] Nobuyoshi Nakada 2019-06-08 09:44:04 UTC

io.c のマクロ定義やコメントで非常に長くなってた行を折り返すようにしています。

[5a840517ae] Nobuyoshi Nakada 2019-06-08 09:44:18 UTC

b76630f73e8362d3072bfa7178471ddc5d21c235 のリトライ。 require "rubygems/package" の追加を lib/rubygems/commands/unpack_command.rb だけにしています。

[27a59ca2c8] Nobuyoshi Nakada 2019-06-08 10:40:55 UTC

macOS で __has_feature() および __has_attribute() が未定義だった時に API_AVAILABLE() と API_DEPRECATED() というマクロを定義するようにしています。よくわかりませんがコミットログによれば MacPorts でインストールした gcc でのビルドエラーを修正するとのことで、Xcode 10.2.1 でインストールされているヘッダがおかしいんじゃないかとのこと。

[1ca03dc4f7] Nobuyoshi Nakada 2019-06-08 10:46:32 UTC

gcc 9.1 での警告除去のため明示的なキャストや初期化の追加、変数の volatile 修飾子の追加など。

[f42588f754] Nobuyoshi Nakada 2019-06-08 11:08:18 UTC

tool/file2lastrev.rb で revision.h を生成する時にリリース版でない時(RUBY_PATCHLEVEL が -1 の時)に RUBY_RELEASE_DATE に時刻まで含めるようにしています。 revision が commit hash になったのでぱっと見でどのへんのバージョンかわからなくなったため。

ruby-trunk-changes 2019-06-07

今日はタイムアウトで失敗するテストの対応や VM 命令の peephole optimization の不具合でおかしな挙動になっていた問題の修正などがありました。

[60924636e5] Yusuke Endoh 2019-06-06 12:18:26 UTC

net/http のテストでタイムアウトの数値を EnvUtil.apply_timeout_scale を通すことで環境変数によるスケーリングに対応するようにしています。 Solaris での CI のタイムアウト対策とのこと。

[9f941f61ef] Yusuke Endoh 2019-06-06 12:19:09 UTC

60924636e5184c967df129e523ba9374ccc57144 と同じく webrick のテストでもタイムアウト値を EnvUtil.apply_timeout_scale を利用するようにしています。

[09a2189c1b] Nobuyoshi Nakada 2019-06-06 16:56:22 UTC

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

[2bc09665ab] Nobuyoshi Nakada 2019-06-06 17:00:48 UTC

拡張ライブラリ win32 の Win32::Registry#each_value で例外発生時にも index を増やすように修正しています。

[aee7790131] git 2019-06-06 17:04:51 UTC

version.h の日付更新。

[6f9d5fafe0] Nobuyoshi Nakada 2019-06-06 03:49:08 UTC

Makefile.in を template/Makefile.in に移動しています。

[bb3c89b643] Nobuyoshi Nakada 2019-06-06 23:58:53 UTC

6f9d5fafe040cb02a1278fbfcdcb8063d564824c の追加修正で .travis.yml も Makefile.in の移動に追随させています。

[200c840b95] Nobuyoshi Nakada 2019-06-07 00:02:48 UTC

6f9d5fafe040cb02a1278fbfcdcb8063d564824c および bb3c89b6437049e26669b2156310670d5e06e386 の Makefile.in の移動を revert しています。

[aef3bb3513] Nobuyoshi Nakada 2019-06-07 00:06:55 UTC

Makefile.in 内の Makefile ターゲットの依存関係から Makefile.in 自身を削除しています。あれ、これはいいのかな?

[c7477c3e1f] Nobuyoshi Nakada 2019-06-07 00:09:29 UTC

6f9d5fafe040cb02a1278fbfcdcb8063d564824c および bb3c89b6437049e26669b2156310670d5e06e386 の Makefile.in の template/ 配下への移動のリトライ。

[7e403dc6c8] Yusuke Endoh 2019-06-07 00:26:40 UTC

openssl のテストでもタイムアウト値を EnvUtil.apply_timeout_scale を通して使うようにしています。

[c55de95ff1] Nobuyoshi Nakada 2019-06-07 01:05:42 UTC

CI のためということで空の(コメントだけの) Makefile.in を追加しています。

[119ca4343c] Jeremy Evans 2019-06-07 04:10:21 UTC

rubyspec の Process.clock_getres や socket のテストで OpenBSD でサポートされないものを実行除外するようにしたり、 String#crypt のテストを OpenBSD だけ独自のものに書きかえたりしています。

[b8af33e63b] Jeremy Evans 2019-05-25 04:32:37 UTC

openssl のテストで LibreSSL でサポートされていない処理でエラーになった時に無視するようにしています。

[a6a26e42b1] Yusuke Endoh 2019-06-07 05:45:06 UTC

peephole optimization による VM 命令列の最適化で a = a のような無意味な式を if 文の本体に持つ文がうまく動かないことがある不具合を修正しています。 iseq_peephole_optimization() で if 文の条件部で prev insn がない時にも変数に代入してしまう副作用があったため後の条件分岐がおかしくなってしまったみたいです。 [ruby-dev:50792] [Bug #15906]

[6566919176] Nobuyoshi Nakada 2019-06-07 09:45:49 UTC

標準添付ライブラリ rdoc のヒアドキュメントの終端の判定で末尾の改行の除去を正規表現を使った gsub からたんに String#chomp と String#lstrip! を利用するように変更しています。リファクタリングかと思ったけどコミットログによると改行に \r (CR) が含まれていた時にも対応するという意味もあるようです。 http://github.com/ruby/rdoc/issues/694, http://github.com/ruby/rdoc/issues/697, http://github.com/ruby/rdoc/issues/705

ruby-trunk-changes 2019-06-06

今日は CGI.escapeHTML の最適化(のリトライ)などがありました。

[f3c877e8de] Takashi Kokubun 2019-06-05 11:07:19 UTC

tool/vcs.rb で git コマンドを実行する時に ~/.gitconfig の設定の影響を受けないようにするために実行時に HOME 環境変数を unset しておくようにしています。ううむ、なるほど。

[0a29dc87e6] Takashi Kokubun 2019-06-05 10:28:51 UTC

8d81e59aa7a62652caf85f9c8db371703668c149 の CGI.escapeHTML のリトライです。 ALLOCA_N() のかわりにサイズが大きい時はヒープを使う ALLOCV_N() を利用してメモリ確保するようにしています。 https://github.com/ruby/ruby/pull/2226

[6dc0541ed3] Takashi Kokubun 2019-06-05 13:29:53 UTC

0a29dc87e62c701db56816cb430daf07a4f02bea の CGI.escapeHTML の最適化について NEWS ファイルに追記しています。

[eadc06ba16] aycabta 2019-06-05 19:25:16 UTC

reline の emacs mode での transpose_words のテストでマルチバイト文字の時のテストケースを追加しています。

[fd17337228] git 2019-06-05 19:25:58 UTC

version.h の日付更新。

[02880d1f4a] aycabta 2019-06-05 19:57:52 UTC

reline の emacs mode での transpose_words でバッファに単語が1つしかない時のショートカットを追加しています。

[884576bf12] Nobuyoshi Nakada 2019-06-05 23:21:40 UTC

version.c の ruby の定数 RUBY_REVISION についての rdoc 用コメントの説明を svn の revision から git の commit hash であると変更しています。

[d046fe9262] Nobuyoshi Nakada 2019-06-06 03:03:19 UTC

configure の最後に設定の概要を出力するところで行の折り返しサイズを $COLUMNS を参照して動的に決めるようにしています。

[1e54903684] Yusuke Endoh 2019-06-05 12:07:27 UTC

拡張ライブラリ openssl のテスト用の鍵を OpenSSL 1.1.1 の要求する強度にするため作りなおしています。 https://github.com/ruby/openssl/pull/217

[861b50d81d] Yusuke Endoh 2019-06-06 06:25:18 UTC

rubygems の Gem.use_gemdeps でメッセージの抑制のため Gem::DefaultUserInteraction.ui で出力をリダイレクトしている場合に fd leak するのを避けるため ensure 節での close を追加しています。

[c2a9c35024] Kazuhiro NISHIYAMA 2019-06-06 06:38:00 UTC

lib/rubygems.rb に再帰的 require の警告を抑制するため require "bundler" に後置 if で条件を追加しています。

[fcc36d767b] Kazuhiro NISHIYAMA 2019-06-06 07:49:40 UTC

しかし c2a9c350249588677cf68b506539093504927eac では警告が除去できなかったそうで revert しています。