ruby-trunk-changes r66093 - r66103

今日は非互換による不具合のため pipe と socket の fd をデフォルトで non-blocking にする変更のとりやめや、配列リテラルの評価時のコピーを遅延する最適化などがありました。

normal: r66093 2018-11-30 05:00:00 +0900

r65922 の socket と pipe のデフォルト non-blocking 化の影響で rack の Rack::Deflator が不具合を起こしていたので RUBY_PIPE_NONBLOCK_DEFAULT を 0 にしてデフォルト non-blocking 化をやめています。 [ruby-core:88305] [Bug #14968] [ruby-core:90133] [Bug #15356]

svn: r66094 2018-11-30 05:00:18 +0900

version.h の日付更新。

tenderlove: r66095 2018-11-30 05:39:51 +0900

VM 命令の duparray や ISeq の disasm 時などのオペランドの配列を変換する時の関数 rb_ary_resurrect() で新規に配列オブジェクトを rb_ary_new4() で生成するところを、バッファを共有するオブジェクトを生成するように ary_make_partial() で生成するようにしています。配列リテラルが書かれてるところでも duparray が使われるけど常にコピーが発生するけど書き換えるまでバッファ内容のコピーを遅延させるようにしています。 [ruby-core:90097] [Feature #15289]

normal: r66096 2018-11-30 07:37:29 +0900

io.c で open() とか dup2() などなど標準ライブラリ関数などでエラー時に -1 を返すものを r == -1 のように -1 との比較でエラーチェックしていたのを、r < 0 のように 0との比較でチェックするようにリファクタリングしています。コミットログを読むとこれはコンパイルした時のコードサイズの削減のためみたいです。うーん減るのかこれで。

svn: r66097 2018-11-30 07:37:35 +0900

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

normal: r66098 2018-11-30 08:28:15 +0900

io.c で 32bit と 64bit の整数の暗黙の変換をしていたところに明示的なキャストを追加しています。

normal: r66099 2018-11-30 08:30:28 +0900

r66098 の続き。 io.c に明示的キャストもう一箇所追加しています。

normal: r66100 2018-11-30 12:56:29 +0900

r66001 で postponed job の管理を MJIT の worker thread のみ特別に race condition 回避するために排他処理を追加した時に signal safe でなくなってしまったとのことで r66001 は revert して、かわりに postponed job のジョブ管理のために rb_vm_t::workqueue という list によるキューを作って、rb_postponed_job_flush() でこのリストに入れられた job を同期的に追加するようにする仕組みを追加しています。もう postponed job 自体をリストで管理したらいいんじゃ……とか思わなくもないですが、そうすると Ruby の Thread から使われる通常のジョブの処理が遅くなるとかなんだろうな。 [ruby-core:89848] [Bug #15316]

normal: r66101 2018-11-30 12:56:34 +0900

test/testunit/test_parallel.rb のテストで MJIT が有効な時にタイムアウトを変更しているところに --subprocess-timeout-scale オプションの係数もかけるようにしています。

nobu: r66102 2018-11-30 16:04:00 +0900

make update-bundled_gems で gem の source_code_uri が空の時に gemspec の homepage をかわりに使うようにしています。

nobu: r66103 2018-11-30 16:19:49 +0900

r65088 での enc/unicode.c のコメントを少し詳細にしています。