Hatena::ブログ(Diary)

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

2018-04-24 ruby-trunk-changes r63247 - r63251

[][]ruby-trunk-changes r63247 - r63251

今日は VM 命令列の最適化の拡張などがありました。

kazu: r63247 2018-04-23 21:09:21 +0900

標準添付ライブラリ uriURI::Generic#port の rdoc 用コメントで文字列としてかえってくるように書かれてたので整数でかえってくるように変更しています。

nobu: r63248 2018-04-23 21:51:18 +0900

iseq_peephole_optimize() による VM 命令列の最適化で、jump 命令で飛んだ先で即 leave している場合に jump せずにその場で leave するようにする最適化で、jump 先に operand のない命令1つだけはさんで leave だった時もインライン化というか命令をコピーするようにしています。 dniobj の代入がトリッキーだなぁ。

k0kubun: r63249 2018-04-24 01:20:45 +0900

r63212 の attr_reader によるメソッドのインライン化の revert。 ある条件でうまく動かないことがあったみたいです。

svn: r63250 2018-04-24 01:20:46 +0900

version.h の日付更新。

nobu: r63251 2018-04-24 08:46:26 +0900

標準添付ライブラリ webrick のテストで極端に長いヘッダを含むリクエストを受け取った時にソケットを閉じた時のクライアント側の例外として macOS 10.10 では Errno::EPROTOTYPE が発生することがあるそうでこれも捕捉するようにしています。

2018-04-23 ruby-trunk-changes r63238 - r63246

[][]ruby-trunk-changes r63238 - r63246

今日は net/imap の keepalive 設定の有効化や、VM 命令の最適化の対象の拡張などがありました。

normal: r63238 2018-04-22 21:09:07 +0900

rb_native_cond_initialize() の引数から flags を削除して常に RB_CONDATTR_CLOCK_MONOTONIC で生成するようにしています。 ついでに? pthread_cond_xxx() の引数に rb_nativethread_cond_t を直接渡すようにしています。っていうかこれいままでメンバーにアクセスしてたの不可視な中身にアクセスしてたのかな? [ruby-core:85639] [Misc #14497]

ko1: r63239 2018-04-23 01:03:09 +0900

rubyspec の rss についてのテストが XPath の仕様変更でエラーになっていたので skip するようにしています。

svn: r63240 2018-04-23 01:03:10 +0900

version.h の日付更新。

ko1: r63241 2018-04-23 01:33:49 +0900

rubyspec の rexml のテストもエラーになっていたのでコメントアウトするようにしています。

stomar: r63242 2018-04-23 04:41:06 +0900

printf の rdoc 用コメントの文法修正。 https://github.com/ruby/ruby/pull/1789

normal: r63243 2018-04-23 06:21:06 +0900

標準添付ライブラリ net/imap で開く TCPSocket で TCPSocket#setsockopt で SO_KEEPALIVE をセットするようにしています。繋ぎっぱなしにした状態で接続が切れているとそれに気がつけないので定期的に keepalive パケット送信するようにしています。 [ruby-core:86628] [Feature #14703]

nobu: r63244 2018-04-23 11:07:11 +0900

r63238 の続き。 condvar のタイマーとして CLOCK_MONOTONIC が使えなかった時にはデフォルトの CLOCK_REALTIME に fallback するようにしています。 [ruby-core:85688] [Misc #14497]

normal: r63245 2018-04-23 14:54:06 +0900

r63217 で追加した fd 再利用対応のテストの調査で r63231 で追加した Thread#join のタイムアウトを調整しています。

nobu: r63246 2018-04-23 18:52:23 +0900

iseq_peephole_optimize() の VM 命令最適化ですぐに pop されてしまう値を push する命令を消す最適化の対象に dup, getlocal, getblockparam, getblockparamproxy なども追加しています。

2018-04-22 ruby-trunk-changes r63227 - r63237

[][]ruby-trunk-changes r63227 - r63237

今日は標準添付ライブラリ rexml の XPath parser の機能追加や修正などがありました。

k0kubun: r63227 2018-04-21 22:15:43 +0900

r63225 で branchiftype という命令は削除されたのにテストメソッド名に残っていたところがあったのでメソッド名改名しています。

stomar: r63228 2018-04-22 05:04:05 +0900

標準添付ライブラリ uri の rdoc 用コメントの文法やサンプルコードの修正。

svn: r63229 2018-04-22 05:04:06 +0900

version.h の日付更新。

nobu: r63230 2018-04-22 08:02:21 +0900

MJIT の実行時のコンパイル待ちのループに pch_status のチェックを追加してヘッダの生成に失敗した時にタイムアウトを待たずに抜けるようにしています。

normal: r63231 2018-04-22 08:32:18 +0900

r63217 で追加した fd が再利用された時に誤って close の通知を受け取らないようにした修正のテストが一部の CIタイムアウトをおこしたみたいなので、調査のため IO#read のかわりに IO#sysread や IO#gets を使うようにして、各 Thread の join にタイムアウトをかけてどの Thread が詰まっているのか検出するようにしています。

nobu: r63232 2018-04-22 09:02:56 +0900

mjit_config.h の生成時に Universal binary のビルド時の各 architecture 向けのオプション MJIT_ARCHFLAG を preprocessor の分岐内で定義するようにしています。

nobu: r63233 2018-04-22 09:46:08 +0900

拡張子 .cmd のファイルに実行権限を追加しています。ということなんですが git 経由でみてるとどのファイルを操作してるのかはっきりしませんが、この次で win32/rtname.cmd を操作してみたいで、ここではなにを操作したんだろう…。

nobu: r63234 2018-04-22 09:47:56 +0900

win32/rtname.cmd に実行権限を付加しています。

k0kubun: r63235 2018-04-22 13:01:23 +0900

mjit_compile.c の --jit-debug オプションが有効な時のコード出力部分にコメントを追記しています。

kou: r63236 2018-04-22 17:09:04 +0900

標準添付ライブラリ rexml の XPath parser に XPath 2.0 で追加された仕様のサポートを追加しています。 XPath にもバージョンがあるのか。 https://www.w3.org/TR/1999/REC-xpath-19991116/#NT-NodeTest

kou: r63237 2018-04-22 18:38:06 +0900

標準添付ライブラリ rexml の XPath parser で position の指定があった時の不具合を修正しています。

2018-04-21 ruby-trunk-changes r63212 - r63226

[][]ruby-trunk-changes r63212 - r63226

今日はマルチスレッド時の IO の race condition 修正やオブジェクト型チェックの VM 命令最適化などがありました。

k0kubun: r63212 2018-04-20 22:42:08 +0900

MJIT のコード生成用のテンプレート tool/ruby_vm/views/_mjit_compile_send.erb からメソッドキャッシュが効いてない時のチェック部分を tool/ruby_vm/views/_mjit_compile_send_guard.erb というテンプレートに切り出して、attr_reader によるメソッドのインライン化に対応する最適化

normal: r63213 2018-04-21 06:38:27 +0900

シグナル処理時に使うマシンスタックを別途用意する signaltstack の確保を Init_heap() から rb_register_sigaltstack() に移動しています。確保と登録が別の場所でされてたので readability のためにまとめた、とのことなのでリファクタリングですかね。 [ruby-core:85621] [Feature #14487]

svn: r63214 2018-04-21 06:38:28 +0900

version.h の日付更新。

normal: r63215 2018-04-21 07:53:37 +0900

r62934 の Queue や Mutex の構造体を fork 時に初期化する変更を再度入れています。 これ revert されたんでしたっけ。 [ruby-core:86316] [Bug #14634]

normal: r63216 2018-04-21 12:12:36 +0900

fd を close() した時にその fd の IO 処理でブロックしている Thread に通知する rb_notify_fd_close() で close(2) から通知までの間に Thread 切り替えの発生しうる rb_thread_schedule() を呼ばないようにしています。 fd は close() で解放されてすぐに別の IO のために再利用される可能性があるため、ここでコンテキストスイッチが起きると開いたばかりの別の fd に対して close の通知が行ってしまう可能性があったようです。

normal: r63217 2018-04-21 13:02:41 +0900

r63216 の変更に対応したテストの追加。

kou: r63218 2018-04-21 15:18:08 +0900

標準添付ライブラリ rexml の XPath parser のテストに書いている XML のインデントや改行などの体裁を修正。

kou: r63219 2018-04-21 15:21:02 +0900

標準添付ライブラリ rexml のテストで assert_raise に例外クラスが指定されていなかったのを指定するようにしています。

kou: r63220 2018-04-21 15:21:41 +0900

標準添付ライブラリ rexml のテストで変数名の変更。

kou: r63221 2018-04-21 15:39:43 +0900

標準添付ライブラリ rexml の REXML::Functions.string で引数の object が nil の時の対応を強化しています。

kou: r63222 2018-04-21 15:43:58 +0900

標準添付ライブラリ rexml の REXML::Functions.concat の実装で各要素を REXML::Functions.string を使って文字列化するように修正しています。

kou: r63223 2018-04-21 15:45:42 +0900

標準添付ライブラリ rexml のテストでメソッド名を _test_xxx と先頭に "_" をつけてテストメソッドとして実行されないようにしていたメソッドの一部を test_xxx と変更して実行されるようにしています。

nobu: r63224 2018-04-21 16:48:36 +0900

compile.c のマクロ INSERT_BEFORE_INSN() と INSERT_BEFORE_INSN1() の引数名を変更しています。

nobu: r63225 2018-04-21 19:52:52 +0900

r59950 で追加された VM 命令の branchiftype という命令を廃止して、かわりに checktype というオブジェクトの型をチェックする命令を追加して checktype と branchif 命令の組み合わせを使うように変更しています。条件の反転を可能にする最適化(?)を可能にするためだそうです。ただ ISeq の命令数は増えますね。

nobu: r63226 2018-04-21 19:52:53 +0900

r63225 の branchiftype の checktype と branchif への分割を利用した最適化? でチェック対象のオブジェクトの型があらかじめわかっていたら checktype を省略して jump 命令に変更するようにしています。ふーむ、しかしこれなら branchiftype のままでも最適化できそうですけど。

2018-04-20 ruby-trunk-changes r63192 - r63211

[][]ruby-trunk-changes r63192 - r63211

今日はなんといっても終端を省略した Range オブジェクトがサポートされるようになり、そのためのリテラル (a..) も追加されています。

mame: r63192 2018-04-20 00:18:50 +0900

Range オブジェクトに終端を省略して無限に続く列のようなオブジェクトを作ることができるようにしています。数列に限らず succ メソッドインクリメントできるものなら文字列でもいいようです。さらに Range リテラルでも (0..) のように終端を省略した記法を許すようにしています。こいつはでかい変更ですね。この文法衝突しないのか……。 [ruby-core:78061] [Feature #12912]

svn: r63193 2018-04-20 00:18:51 +0900

version.h の日付更新。

mame: r63194 2018-04-20 00:18:53 +0900

Range#min, Range#max, Range#include?, Range#cover? や Range#=== などのメソッドで終端が nil の Range オブジェクトに対応するようにしています。 max は nil を返すんですね。 [ruby-core:78061] [Feature #12912]

mame: r63195 2018-04-20 00:18:57 +0900

Range#bsearch も終端がない Range オブジェクトに対応するようにしています。 終端がないのにどうやって二分探索するの!? と思ったら終端がない時は先頭から最初は 1だけずらしたところを pivot にして、探索範囲が大きいほうだったらずらす量を2倍に増やしていくようです。なるほどなー。 [ruby-core:78061] [Feature #12912]

mame: r63196 2018-04-20 00:19:00 +0900

range.c でメソッド名の ID を static 変数から CONST_ID() を使って確保するように変更しています。

mame: r63197 2018-04-20 00:23:34 +0900

r63192 の終端のない Range オブジェクトとそのリテラルの追加について NEWS ファイルに追記しています。 [ruby-core:78061] [Feature #12912]

k0kubun: r63198 2018-04-20 01:19:48 +0900

rb_str_upto_endless_each() の第2引数関数ポインタの方を正確に宣言するようにしています。 mswin でビルドエラーになったようです。

k0kubun: r63199 2018-04-20 01:57:59 +0900

mjit_compile.c の get_iseq_if_available() を has_valid_method_type() と改名して、条件を一部呼び元の MJIT で生成するコードのほうに吊り上げるリファクタリングをしています。

kou: r63200 2018-04-20 05:45:16 +0900

標準添付ライブラリ rexml のテストで使っている XML をよみやすく改行やインデントを整形しています。

kou: r63201 2018-04-20 05:48:28 +0900

標準添付ライブラリ rexml のテストで配列の各要素について assertion でチェックしていたのを、エラー時にわかりやすいように全体で比較するようにしています。

kou: r63202 2018-04-20 05:49:53 +0900

標準添付ライブラリ rexml のテストで無理にループで書いてたチェックをループ展開しています。ruby の for 文久しぶりにみた。

kou: r63203 2018-04-20 05:51:07 +0900

標準添付ライブラリ rexml のテストで res と res.sort を比較するみたいなことをしてましたが、ここの結果は上にある XML で決まってるので固定の値と比較するようにしています。

kou: r63204 2018-04-20 06:34:40 +0900

標準添付ライブラリ rexml の XPath の解釈で先頭の空白文字を削ってしまっていた不具合を修正しています。

nobu: r63205 2018-04-20 08:35:39 +0900

拡張ライブラリ fiddle の Fiddle::Importer が Windows 環境で定数の未定義でエラーになっていたのを修正しています。定数アクセスの NameError を後置 rescue で捕捉して別の定数に fallback してたんですが、この書きかた動きそうだけどだめだったのか。 [ruby-core:86536] [Bug #14686]

[追記]--debug オプションつきで実行すると例外が発生すると(rescue されても発生しただけで)標準エラー出力にメッセージが出るため、それでテストがエラーになることがあったそうです。[/追記]

nobu: r63206 2018-04-20 08:46:55 +0900

r63205 で追加したテストで子プロセスrubyコマンドラインオプションに --disable=gems を追加しています。 警告除去のためとのこと。 [ruby-core:86536] [Bug #14686]

nobu: r63207 2018-04-20 09:10:46 +0900

r63192 の終端なし Range の導入の変更で range_step() の Fixnum から変換した整数同士の加算はオーバーフローしないため逆に Fixnum に戻した時に負の数になる数値になることがあったのでチェックを修正しています。 [ruby-core:78061] [Feature #12912]

nobu: r63208 2018-04-20 09:23:01 +0900

同じく r63192 の終端なし Range の対応の Bignum の加算を rb_funcallv() でメソッド呼び出ししてたところを rb_big_plus() を直接呼ぶようにして、step を考慮するようにしています。 [ruby-core:78061] [Feature #12912]

nobu: r63209 2018-04-20 09:25:30 +0900

vm_core.h のインデント修正のみ。

normal: r63210 2018-04-20 12:22:26 +0900

複数 Thread を作った状態で fork した時に autoload 用のロック機構で解放済みの領域を触ってしまわないように修正しています。multi thread + fork はまだまだなんかありそうですねー。 [ruby-core:86410] [Bug #14634]

hsbt: r63211 2018-04-20 16:10:53 +0900

gems/bundled_gems のバージョンを did_you_mean を 1.2.1、rake を 12.3.1 に更新しています。