今日は lstat(2) の呼び出しや Dir.empty? の処理中の GVL を解放する変更や、ripper の不具合修正や変更がありました。
kazu: r60107 2017-10-03 21:06:14 +0900
標準添付ライブラリ net/http のテストで Net::HTTP の内部の socket をテストのため MockSocket にすりかえる時に、元の socket を close し忘れていたのを修正しています。
normal: r60108 2017-10-04 08:47:29 +0900
file.c の check3rdbyte() という関数で stat(2) を呼んでいたところも r60027 と同様 rb_stat() を使って GVL を解放するようにしています。 check3rdbyte() ってなんだろうかというと File.setuid?, setgid?, sticky? などで mode をチェックするために呼んでいる関数みたいです。
svn: r60109 2017-10-04 08:47:30 +0900
version.h の日付更新。
normal: r60110 2017-10-04 08:47:53 +0900
r60027 の stat(2) に続いて lstat(2) を呼んでいるところでも GVL を解放するようにしています。これもオーバーヘッドがあるけど遅い file system のことを考慮して、ということみたいです。最近 system call の GVL 解放が続いてますけど全体としてどのくらい遅くなるのかちょっと気になりますね…。 [ruby-core:83075] [Feature #13963]
normal: r60111 2017-10-04 09:04:51 +0900
rb_dir_s_empty_p() で opendir(3)、readdir(3)、closedir(3) でディレクトリが空かどうか確認する間 GVL を解放するようにしています。 [ruby-core:83071] [Feature #13958]
nobu: r60113 2017-10-04 13:43:00 +0900
r60102 の parse.y の ripper 向けとの差を減らすため TOKEN2EID() マクロを定義してたのを revert しています。 Ripper.sexp で演算子メソッドの定義部分の結果が変わってしまっていたようです。 [ruby-core:83089] [Bug #13967]
nobu: r60114 2017-10-04 14:30:44 +0900
r60113 で revert した Ripper.sexp の挙動の変化についてテストケースを追加しています。 [ruby-core:83089] [Bug #13967]
nobu: r60115 2017-10-04 14:48:33 +0900
parse.y の予約語を%token で id 型として宣言するようにして、予約語を識別子として使うときの規則部でキャストを削っています。
nobu: r60116 2017-10-04 15:47:29 +0900
parse.y で var_field() というマクロの定義を ripper 向けに追加して ripper 向けと本体向けで規則部の分岐をけしています。また以前同じように対処してた const_decl_gen() でも dispatch1() の呼び出しを追加して ripper の時にコールバックを呼ぶようにしているようです。これにより ripper で parse した時に assign error のイベントに var_field というノードが渡されるようになるようです。チケットの参照がないけどこれはなにかの修正か変更の準備かな。